getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()三者區別

        在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章