使垂直LinearLayout中的所有按钮具有相同的宽度

时间:2014-04-06 20:11:29

标签: android button width

我试图让一个水平LinearLayout中的所有按钮具有相同的宽度,基于一个包含最长文本的按钮。

我尝试的是浏览布局中的所有按钮并设置大小如此。

LinearLayout layout = (LinearLayout) findViewById(R.id.buttonLayout);

    for(int i = 0;i < layout.getChildCount();i++){
        View v = layout.getChildAt(i);
        if(v instanceof Button){
            if(!(v.getId() == R.id.widestButton)){
                ((Button) v).setWidth(findViewById(R.id.widestButton).getWidth());
            }
        }
    }

这确实设置了所有按钮的大小,但是,设置的大小不是widestButton的大小,大约是它的40%。

我如何使这项工作?

1 个答案:

答案 0 :(得分:0)

我自己找到了答案,可能是通过谷歌搜索找到的。

问题是,我在Activitys onCreate上调用了这段代码。 此时,按钮的大小尚未计算。

所以我找到了ViewTreeObserver,它能够在加载布局时添加一个侦听器。我现在使用的代码是:

final LinearLayout layout = (LinearLayout) findViewById(R.id.buttonLayout);
    ViewTreeObserver vto = layout.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            for(int i = 0;i < layout.getChildCount();i++){
                View v = layout.getChildAt(i);
                if(v instanceof Button){
                    if(!(v.getId() == R.id.widestButton)){
                        ((Button) v).setWidth(findViewById(R.id.widestButton).getWidth());
                    }
                }
            }
        }
    });

哪种效果很好。