在Android代碼編寫的過程中,如果我們對自定義控件設置自定義的屬性時,特別是定義一些寬度啊,距離什麼一類的。很明顯我們會用到自定義的資源文件,如果你使用的是AS的話,在初建工程的時候,AS就已經爲你建好了四個資源文件,分別是color.xml, dimens.xml, strings.xml, styles.xml。那我們今天主要說的就是獲取dimens.xml 文件中的資源時所遇到的問題。
當我們用到這個這個資源文件中的資源時,我們會用這樣的代碼: mContext.getResources().getDimension(R.dimen.xxx)。但是當我們查官方文檔的時候,卻發現,有三個很相似的函數在一起,分別是
- float getDimension(int id)
- int getDimensionPixelOffset(int id)
- int getDimensionPixelSize(int id) 那麼這三種有什麼區別呢,什麼時候應該用哪一個呢?
首先,我們可以很直觀的看到這三個函數的返回值是不一樣的,一個是 float 另外兩個是 int。然後,再從他們的名字開始入手,分別是得到尺寸,得到像素值並截取,得到像素。直觀的我們就能知道這麼多了,接着就要開始看文檔說明了。
- getDimension(int id) --> 是基於當前DisplayMetrics進行轉換,獲取指定資源id對應的尺寸
- getDimensionPixelOffset(int
id) --> 與getDimension()功能類似,不同的是將結果轉換爲int,並且偏移轉換是直接截斷小數位,即取
整(其實就是把float強制轉化爲int,注意不是四捨五入哦)
- getDimensionPixelSize(int id) --> 與getDimension()功能類似,不同的是將結果轉換爲int,並且小數部分四捨五入。
這樣的話,我們就可以很輕鬆的理解啦。舉一個小例子的話就是
假設資源文件中有這樣一個變量<dimen name="activity_vertical_margin1">
16dp </dimen>
那麼 getDimension
返回的就是 16 * density ,注意返回的是 float
getDimensionPixelOffse
返回的是 16 * density,並強制轉化成 int ,(也就是直接把小數後邊的截取掉)
getDimensionPixelSize
返回的是 16 * density,並經過四捨五入轉化成 int