如何获取ImageView的maxWidth和maxHeight参数?

时间:2011-11-29 12:56:48

标签: java android imageview css

我在xml:

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

我希望以编程方式获得 maxWidth maxHeight 参数值:

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

我该怎么做?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

设置宽度和高度周长以填充xml中的父级。然后从代码

imageview.getHeight();

imageview.getWidth();

将为您提供当前在屏幕上绘制的ImageView的最大可用宽度/高度。