使布局宽度等于高度?

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();
    }
}

这是正确的方法吗?还有其他选项吗?(我不确定上面的方法是否正确,例如我不确定宽度测量是否在高度测量之前进行)

谢谢


如果你将宽度设置为fill_parent,方法getWidth()将返回0。这种方法行不通。 - Leandro Silva
2个回答

11

你可以通过该方法获取宽度

imageView.getMeasuredWidth();
所以,你可以设置它的高度。
imageView.setLayoutParams(new LayoutParams(imageView.getMeasuredWidth(), imageView.getMeasuredWidth()));

3
您想把这个放在布局传递的哪个方法中(即:哪个方法)? - Marchy

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();
    }
});

重要提示: 此示例假定您的视图是位于RelativeLayout中的FrameLayout。针对其他布局,请相应更改。


如果宽度被设置为"match_parent"(-1),这段代码将无法工作。只有在之前为该布局指定了数值宽度时,它才能正常工作。 - Jorge
好的,所以你之前指定了布局宽度。但在其他情况下它不起作用(我刚刚测试过了)。 - Jorge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接