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

Java 如何获取ImageView的maxWidth和maxHeight参数?,java,android,imageview,css,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" /> ..

我在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" />
 ...

如何操作?

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

imageview.getHeight();


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

ImageView的相关成员变量为
mMaxWidth
mMaxHeight
,两者均声明为私有。也没有可用的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()
,但不同。如果在上述检查之后运行以下代码段,您将看到不同之处(由于设置值或源图像大小的原因,当前的大小和最大大小不相同):


是的,我认为存在一种提取maxWidth和maxHeight值的原生方法。但这种方式仍然没有建立。我真的忘记了反射:)它工作得很好,非常感谢你的回答:)有趣的是:如果maxWidth或maxHeight不是在XML 2147483647(Integer.MAX_值)中声明的,那么将得到它。是的,这是默认值。如果您对android内部的工作方式感兴趣,您可以随时访问。例如,您可以直接看到无法获取这些最大值,因为在搜索变量名称时,这些变量仅在文件中的几个点使用。是的,但这些值不是我要求的maxHeight和maxWidth参数的值。
imageview.getWidth();
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();
}
Log.d("TEST", "width="+iv.getWidth()+" || height="+iv.getHeight());
Log.d("TEST", "maxWidth="+maxWidth+" || maxHeight="+maxHeight);