在寫(xiě)自定義View的時(shí)候想獲取dimen值的時(shí)候禁筏,有下面三個(gè)函數(shù):
- (float) getDimension(int index, float defValue)
- (int) getDimensionPixelSize(int index, int defValue)
- (int) getDimensionPixelOffset(int index, int defValue)
看看API reference里的解釋?zhuān)?/p>
- getDimension()是基于當(dāng)前DisplayMetrics進(jìn)行轉(zhuǎn)換若治,獲取指定資源id對(duì)應(yīng)的尺寸夹姥。文檔里并沒(méi)說(shuō)這里返回的就是像素乘客,要注意這個(gè)函數(shù)的返回值是float,像素肯定是int。
- getDimensionPixelSize()與getDimension()功能類(lèi)似绞惦,不同的是將結(jié)果轉(zhuǎn)換為int,并且小數(shù)部分四舍五入洋措。
- getDimensionPixelOffset()與getDimension()功能類(lèi)似济蝉,不同的是將結(jié)果轉(zhuǎn)換為int,并且偏移轉(zhuǎn)換(offset conversion菠发,函數(shù)命名中的offset是這個(gè)意思)是直接截?cái)嘈?shù)位王滤,即取整(其實(shí)就是把float強(qiáng)制轉(zhuǎn)化為int)。
測(cè)試代碼:
<resources>
<dimen name="dp_01">16dp</dimen>
<dimen name="px_01">16px</dimen>
<dimen name="sp_01">16sp</dimen>
</resources>
作者:亦楓
鏈接:http://www.reibang.com/p/9cdfc2f26a52
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有滓鸠。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)雁乡,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
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);
作者:亦楓
鏈接:http://www.reibang.com/p/9cdfc2f26a52
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有糜俗。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)踱稍,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
測(cè)試結(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
作者:亦楓
鏈接:http://www.reibang.com/p/9cdfc2f26a52
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有吩跋。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)寞射,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
補(bǔ)充:
當(dāng)利用上述的getDimension() 獲取到數(shù)據(jù)后锌钮,如果用TextView/EditText.setTextSize()時(shí)需注意:
- setTextSize(float size) {
setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}
即默認(rèn)是使用sp數(shù)據(jù)桥温,它和px之間涉及到轉(zhuǎn)化。 - setTextSize(int unit, float size)
其中 unit = {TypedValue.COMPLEX_UNIT_SP梁丘,TypedValue.COMPLEX_UNIT_PX侵浸,TypedValue.COMPLEX_UNIT_DIP};
/**
* 根據(jù)手機(jī)的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根據(jù)手機(jī)的分辨率從 px(像素) 的單位 轉(zhuǎn)成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}