2016-11-15 53 views
0

器件密度和屏幕尺寸如何獲得最大寬度和最大高度爲ImageView的根據的Android如何獲得最大寬度和最大高度爲ImageView的根據的Android

器件密度和屏幕尺寸

我正在使用此工具

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    try { 
     Drawable drawable = getDrawable(); 

     if (drawable == null) { 
      setMeasuredDimension(0, 0); 
     } else { 
      int width = (MeasureSpec.getSize(widthMeasureSpec))/4; 
      int height = (width * drawable.getIntrinsicHeight()/drawable.getIntrinsicWidth()); 
      setMeasuredDimension(width, height); 
     } 
    } catch (Exception e) { 
     isMeasured = false; 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

回答

0

您似乎誤解了Android佈局的工作方式。基本上,視圖由父母分配一個大小。 onMeasure允許視圖影響大小,但必須遵循方法合同。

尤其是您的onMeasure沒有考慮測量模式(橫向和縱向)。您需要爲所有九個可能的狀態提供了一個測量:

HORIZ準確,垂直正是 :設置大小對什麼傳入(應該是最後一次調用)

HORIZ準確,垂直最多 :水平地設置大小爲給定值,垂直設置的值 即至多給定值(縱橫比拉伸可以使 該較小)

HORIZ確切地說,垂直未指定 :水平尺寸設定爲給定的一個,設定垂直尺寸到 最好對應尺寸(例如保持縱橫比)

HORIZ至多,垂直恰好 :設置垂直尺寸到給定尺寸。將水平尺寸設置爲 適當的尺寸,該尺寸至多是給定的水平尺寸。

水平最多,垂直最多 :根據長寬比來查找哪個維度界定圖像。 對待這個維度,就好像它被賦予完全相同(但如果圖像比界限 小,你也可以使用代替)最多

HORIZ,垂直不明 :如果水平尺寸比小圖像對待它,就好像 尺寸是針對確切的水平尺寸給出的,否則將其視爲 (如果水平約束是精確的)。

HORIZ不明,垂直精確 :像HORIZ準確,垂直不明,但HORIZ和垂直交換

HORIZ不明,垂直最多 :像HORIZ最多,垂直不明,但HORIZ和垂直換

HORIZ不明,垂直不明 :圖像的固有大小或一些默認如果圖像是不給出0(默認使用100,100),使用0,0使佈局編輯器 很笨拙。

順便說一句。不要捕捉異常,即poor practice

相關問題