10

我想要一个宽度=fill_parent 的 ImageView,高度应该是宽度。我不确定是否有办法在 xml 中指定它,是创建我自己的 ImageView 派生类的唯一选择吗?:

public class MyImageView extends ImageView {

    // Just return whatever the current width is?
    private int measureHeight(int measureSpec) {
        return getWidth();
    }
}

这是要走的路,还有其他选择吗?(我不确定上述是否正确,例如不确定宽度测量是否发生在高度测量之前)

谢谢

4

2 回答 2

11

您可以使用方法获取宽度

imageView.getMeasuredWidth();

所以,你可以设置它的高度

imageView.setLayoutParams(new LayoutParams(imageView.getMeasuredWidth(), imageView.getMeasuredWidth()));
于 2012-04-21T21:45:30.303 回答
0

使布局高度等于宽度:

digulino的答案(至少在我的情况下)的问题是,如果您想在开始时更改尺寸,getMeasuredWidth()将返回0,因为尚未绘制视图。

你仍然可以通过使用这样的Runnable()线程来做到这一点:

FrameLayout frame = (FrameLayout)findViewById(R.id.myFrame);
frame.post(new Runnable() {
    @Override
    public void run() {
        RelativeLayout.LayoutParams lparams;
        lparams = (RelativeLayout.LayoutParams) frame.getLayoutParams();
        lparams.height = frame.getWidth();
        frame.setLayoutParams(lparams);
        frame.postInvalidate();
    }
});

重要提示: 此示例假设您的视图是一个FrameLayout内部的RelativeLayout. 为其他布局相应地更改它。

于 2016-01-30T14:59:04.383 回答