如何获得ImageView的最大宽度和最大高度根据Android中的设备密度和屏幕尺寸

时间:2016-11-15 10:35:55

标签: android listview android-imageview

如何获取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);
    }
}

1 个答案:

答案 0 :(得分:0)

您似乎误解了Android布局的工作方式。基本上视图由父母分配大小。 onMeasure允许视图影响大小,但必须遵循方法合同。

特别是你的onMeasure没有考虑测量模式(水平和垂直)。您需要为所有九种可能的状态提供测量:

完全正确,垂直正确 :将大小设置为传入的内容(应该是最后一次调用)

水平,最多垂直 :将大小水平设置为给定值,垂直设置值      这至多是给定值(纵横比可以拉伸      这个更小)

水平,垂直未指定 :将水平尺寸设置为给定的尺寸,将垂直尺寸设置为      最佳对应尺寸(例如保持纵横比)

最多水平,垂直 :将垂直大小设置为给定大小。将水平尺寸设置为      适当的尺寸,最多为给定的水平尺寸。

最多水平,最多垂直 :根据宽高比查找图像的哪个尺寸。      将该维度视为完全给出(但如果图像是      小于边界,你也可以使用它而不是)

水平最多,垂直未指定 :如果水平尺寸小于图像,则将其视为处理      给出了精确水平尺寸的尺寸,否则将其视为      如果水平约束是准确的。

水平未指定,垂直完全 :像horiz一样,垂直未指定,但水平和垂直交换

水平未指定,最多垂直 :最像horiz,垂直未指定,但水平和垂直交换

水平未指定,垂直未指定 :图像的固有大小,如果图像不是,则为某些默认大小      给定(默认使用100,100),使用0,0制作布局编辑器      别扭。

顺便说一下。不要捕捉异常,即poor practice