使布局宽度等于高度?

时间:2012-04-21 21:24:48

标签: android

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

public class MyImageView extends ImageView {

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

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

由于

2 个答案:

答案 0 :(得分:12)

您可以使用方法

获取宽度
imageView.getMeasuredWidth();

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

imageView.setLayoutParams(new LayoutParams(imageView.getMeasuredWidth(), imageView.getMeasuredWidth()));

答案 1 :(得分:0)

使布局高度等于宽度:

digulino's answer(至少在我的情况下)的问题是,如果您想在开始时更改尺寸,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。相应地更改其他布局。