0

我有两个按钮放在布局内。我希望它们具有相同的宽度。但每个按钮的宽度必须等于其中最宽的一个。现在我使用 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);
    }
}

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

4

2 回答 2

0

您能否比较活动的 onCreate() 方法中的按钮宽度并设置它们,或者您是否需要在不同的时间更改它们的大小?

编辑:

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

于 2012-06-11T23:07:56.967 回答
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);
}
于 2012-07-10T20:54:54.447 回答