大家知道荚藻,在Android代碼中獲取res資源dimens.xml
文件中定義的尺寸大小摔桦,可以通過如下三個方法:
- getDimension
- getDimensionPixelOffset
- getDimensionPixelSize
他們的相同點和區(qū)別是:
getDimension和getDimensionPixelOffset功能類似,唯一區(qū)別就是返回類型不一樣隧熙,前者返回類型為int類型灶似,后者為float類型;
如果resources中dimen屬性值的單位是dp或者sp模庐,三者都需要將其乘以density烛愧,然后返回對應px值;
如果單位是px掂碱,getDimension和getDimensionPixelOffset返回原值怜姿,而getDimensionPixelSize仍需乘以density;
比如疼燥,在dimens.xml
資源文件中定義如下測試尺寸:
<resources>
<dimen name="dp_01">16dp</dimen>
<dimen name="px_01">16px</dimen>
<dimen name="sp_01">16sp</dimen>
</resources>
測試代碼:
float a1=getResources().getDimension(R.dimen.dp_01);
int a2=getResources().getDimensionPixelOffset(R.dimen.dp_01);
int a3=getResources().getDimensionPixelSize(R.dimen.dp_01);
float b1=getResources().getDimension(R.dimen.px_01);
int b2=getResources().getDimensionPixelOffset(R.dimen.px_01);
int b3=getResources().getDimensionPixelSize(R.dimen.px_01);
float c1=getResources().getDimension(R.dimen.sp_01);
int c2=getResources().getDimensionPixelOffset(R.dimen.sp_01);
int c3=getResources().getDimensionPixelSize(R.dimen.sp_01);
Log.d("test", "getDimension= "+a1+", getDimensionPixelOffset="+a2+",getDimensionPixelSize="+a3);
Log.d("test", "getDimension= "+b1+", getDimensionPixelOffset="+b2+",getDimensionPixelSize="+b3);
Log.d("test", "getDimension= "+c1+", getDimensionPixelOffset="+c2+",getDimensionPixelSize="+c3);
測試結(jié)果:
//Device (480*800,240dpi,density=1.5):
getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24
getDimension= 16.0, getDimensionPixelOffset=16,getDimensionPixelSize=24
getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24
了解了上述區(qū)別后沧卢,再來看看在代碼中設(shè)置TextSize的問題。
setTextSize(float size)的默認大小單位是sp醉者,所以通過該方法設(shè)置的文本大小和在布局中通過android:textSize
屬性設(shè)置的文本大小不一致但狭,所以需要用到設(shè)置文本大小的另一個方法,指定單位:
setTextSize(int unit, float size)
其中撬即,第一個參數(shù)的可選單位值為:
- TypedValue.COMPLEX_UNIT_PX : Pixels
- TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
- TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
可以根據(jù)在資源中定義的不同尺寸選擇合適的單位格式立磁,這樣,就能在代碼中設(shè)置和布局中相同大小的文本搞莺。
關(guān)注微信公眾號息罗,第一時間獲取技術(shù)資訊!