今天寫(xiě)代碼的時(shí)候蛤吓,需要從資源文件中讀取一個(gè)長(zhǎng)度值糠赦,用來(lái)設(shè)置控件的寬高,誤以為getDimension()返回的就是資源里定義的dp值,后來(lái)發(fā)現(xiàn)不是我理解的那樣淌山。下面介紹一下getDimension()顾瞻、getDimensionPixelSize()和getDimensionPixelOffset()的區(qū)別;
先看我在資源中的定義:
<dimen name="guide_first_cover_image_width">171dp</dimen>
然后打印出它們的值看看
QLog.i(TAG,String.format("getDimension: %f",mContext.getResources().getDimension(R.dimen.guide_first_cover_image_width)) );
QLog.i(TAG,String.format("getDimensionPixelSize: %d",mContext.getResources().getDimensionPixelSize(R.dimen.guide_first_cover_image_width)));
QLog.i(TAG,String.format("getDimensionPixelOffset:%d",mContext.getResources().getDimensionPixelOffset(R.dimen.guide_first_cover_image_width)));
結(jié)果如下:
getDimension: 256.500000
getDimensionPixelSize: 257
getDimensionPixelOffset:256
我的模擬器是480*800的,屏幕密度是1.5蕴纳,從打印結(jié)果就可以推知古毛,getDimension()、getDimensionPixelSize()和getDimenPixelOffset()的結(jié)果值都是將資源文件中定義的dip值乘以屏幕密度,即171*1.5=256.5,只是getDimension()返回的是float胶征,其余兩個(gè)返回的是int, 其中g(shù)etDimensionPixelSize()返回的是實(shí)際數(shù)值的四舍五入,而getDimensionPixelOffset返回的是實(shí)際數(shù)值去掉后面的小數(shù)點(diǎn); 再跟蹤代碼查看這三個(gè)函數(shù)的具體實(shí)現(xiàn)弧烤,可以了解得更具體蹬敲。總?cè)欢辈ǎ@三個(gè)函數(shù)返回的都是dip值乘以屏幕密度,如果你在資源文件中定義的長(zhǎng)度單位不是dip瘪校,而是px的話,程序會(huì)直接拋出異常泣懊。