android:按钮的宽度相同,等于最宽的按钮

时间:2012-06-11 22:55:34

标签: android button markup

我有两个按钮放在布局内。我希望他们有相同的宽度。但每个按钮的宽度必须等于最宽的按钮。现在我使用ViewTreeObserver。

    class LayoutListener implements ViewTreeObserver.OnGlobalLayoutListener{
    private Button btn1, btn2;

    public LayoutListener(Button b1, Button b2){
        btn1 = b1; btn2 = b2;
    }
    @Override
    public void onGlobalLayout() {
        int w1 = btn1.getWidth();
        int w2 = btn2.getWidth();
        if (w1 < w2)
            btn1.setWidth(w2);
        else
            btn2.setWidth(w1);
    }
}

但由于元素在向用户显示后重新绘制并且看起来很糟糕,因此这不是一个好的决定。 并且你可以猜到问题,我怎样才能达到所需的行为?有没有标记操作的方法或我应该实现特殊代码?我们希望避免创建可用作按钮容器的自定义布局。

2 个答案:

答案 0 :(得分:0)

您可以比较活动的onCreate()方法中的按钮宽度,然后设置它们,还是需要在不同的时间更改它们的大小?

编辑:

在为视图充气后,您可以创建两个Button变量并使用(Button)yourViewName.findViewById(R.id.buttonid);绑定它们。然后,您可以使用getWidth()和setWidth()根据需要进行比较和修改。

答案 1 :(得分:0)

如果我在充气后直接呼叫getWidth,它总是返回0。 为了在获取大小之前阻止它,我应该使用measure函数初始化测量过程。 这是我的代码(但我不确定这是最好还是最快的方式))):

....
view = inflator.inflate(R.layout.send_command_item, null);
btnOff = (Button)view.findViewById(R.id.btnOff);
btnOn = (Button)view.findViewById(R.id.btnOn);
set_w(btnOff, btnOn);
.....

public void set_w(Button btn1, Button btn2) {
    btn1.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    btn2.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    int w1 = btn1.getMeasuredWidth();
    int w2 = btn2.getMeasuredWidth();
    if (w1 < w2)
        btn1.setWidth(w2);
    else
        btn2.setWidth(w1);
}