我有两个按钮放在布局内。我希望他们有相同的宽度。但每个按钮的宽度必须等于最宽的按钮。现在我使用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);
}
}
但由于元素在向用户显示后重新绘制并且看起来很糟糕,因此这不是一个好的决定。 并且你可以猜到问题,我怎样才能达到所需的行为?有没有标记操作的方法或我应该实现特殊代码?我们希望避免创建可用作按钮容器的自定义布局。
答案 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);
}