2011-11-29 92 views
4

我已經ImageView的在XML聲明:如何獲取ImageView的maxWidth和maxHeight參數?

... 
<ImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:maxHeight="60dip" 
    android:maxWidth="60dip" 
    android:scaleType="centerCrop" /> 
... 

我想maxWidthmaxHeight paramater值編程:

... 
ImageView imageView = (ImageView) findViewById(R.id.image); 
int maxWidth = ? 
int maxHeight = ? 
... 

我該怎麼辦呢?

回答

9

ImageView的相關成員變量是mMaxWidthmMaxHeight,兩者都聲明爲私有。也沒有可用的getter方法,這會給您提供一個選項:
使用反射檢查字段。

下面是一個示例如何做到這一點:

int maxWidth = -1; 
int maxHeight = -1; 
ImageView iv = (ImageView) findViewById(R.id.imageview); 

try { 
    Field maxWidthField = ImageView.class.getDeclaredField("mMaxWidth"); 
    Field maxHeightField = ImageView.class.getDeclaredField("mMaxHeight"); 
    maxWidthField.setAccessible(true); 
    maxHeightField.setAccessible(true); 

    maxWidth = (Integer) maxWidthField.get(iv); 
    maxHeight = (Integer) maxHeightField.get(iv); 
} catch (SecurityException e) { 
    e.printStackTrace(); 
} catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} 

其他的答案提到getWidth()getHeight(),但它是不一樣的。如果您運行檢查上面,你會看到不同後,下面的代碼片段(假設大小和最大大小目前還不相同,由於設定值或源圖像大小)

Log.d("TEST", "width="+iv.getWidth()+" || height="+iv.getHeight()); 
Log.d("TEST", "maxWidth="+maxWidth+" || maxHeight="+maxHeight); 
+0

是的,我認爲有** maxWidth **和** maxHeight **值提取存在的原生方式。但這種方式仍然沒有成立。我真的忘了反射:)它工作正常,非常感謝答案:) – NOSTRA

+1

有趣的事情:如果maxWidth或maxHeight沒有聲明在XML 2147483647(Integer.MAX_VALUE)會得到。 – NOSTRA

+0

是的,這是默認值。如果您有興趣瞭解android內部機制,您可以隨時[查看源代碼](http://google.com/codesearch#uX1GffpyOZk/core/java/android/widget/ImageView.java&q=ImageView%20package:android&type=cs)工作。例如。您可以直接看到沒有辦法獲得這些最大值,因爲變量只在文件的幾個點上使用,當您搜索它們的名稱時。 – 2011-11-29 20:01:58

0

設置寬度和高度周長以在xml中填充父項。然後從代碼

imageview.getHeight(); 

imageview.getWidht(); 

會給你的ImageView的最大可用寬度/高度目前在屏幕上繪製。

+1

啊,但這些值不是我詢問的maxHeight和maxWidth參數的值。 – NOSTRA