如何获取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 :(得分:0)
您似乎误解了Android布局的工作方式。基本上视图由父母分配大小。 onMeasure允许视图影响大小,但必须遵循方法合同。
特别是你的onMeasure没有考虑测量模式(水平和垂直)。您需要为所有九种可能的状态提供测量:
完全正确,垂直正确 :将大小设置为传入的内容(应该是最后一次调用)
水平,最多垂直 :将大小水平设置为给定值,垂直设置值 这至多是给定值(纵横比可以拉伸 这个更小)
水平,垂直未指定 :将水平尺寸设置为给定的尺寸,将垂直尺寸设置为 最佳对应尺寸(例如保持纵横比)
最多水平,垂直 :将垂直大小设置为给定大小。将水平尺寸设置为 适当的尺寸,最多为给定的水平尺寸。
最多水平,最多垂直 :根据宽高比查找图像的哪个尺寸。 将该维度视为完全给出(但如果图像是 小于边界,你也可以使用它而不是)
水平最多,垂直未指定 :如果水平尺寸小于图像,则将其视为处理 给出了精确水平尺寸的尺寸,否则将其视为 如果水平约束是准确的。
水平未指定,垂直完全 :像horiz一样,垂直未指定,但水平和垂直交换
水平未指定,最多垂直 :最像horiz,垂直未指定,但水平和垂直交换
水平未指定,垂直未指定 :图像的固有大小,如果图像不是,则为某些默认大小 给定(默认使用100,100),使用0,0制作布局编辑器 别扭。
顺便说一下。不要捕捉异常,即poor practice。