我有4个按钮,动态改变文本,可以导致按钮的高度不同,我的代码试图避免这种情况,但也创建一个循环
ViewTreeObserver observer= Button0.getViewTreeObserver();
observer.addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int HighestButton;
HighestButton = Button0.getHeight();
Log.d("HighestButton", HighestButton+ " 0");
if(Button1.getHeight() > HighestButton){
HighestButton = Button1.getHeight();
Log.d("HighestButton", HighestButton+ " 1");
}
if(Button2.getHeight() > HighestButton){
HighestButton = Button2.getHeight();
Log.d("HighestButton", HighestButton+ " 2");
}
if(Button3.getHeight() > HighestButton){
HighestButton = Button3.getHeight();
Log.d("HighestButton", HighestButton+ " 3");
}
Button0.setHeight(HighestButton);
Button1.setHeight(HighestButton);
Button2.setHeight(HighestButton);
Button3.setHeight(HighestButton);
}
});
设置按钮高度后,只需从观察者中删除监听器即可
ViewTreeObserver observer= Button0.getViewTreeObserver();
observer.addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int HighestButton;
HighestButton = Button0.getHeight();
Log.d("HighestButton", HighestButton+ " 0");
if(Button1.getHeight() > HighestButton){
HighestButton = Button1.getHeight();
Log.d("HighestButton", HighestButton+ " 1");
}
if(Button2.getHeight() > HighestButton){
HighestButton = Button2.getHeight();
Log.d("HighestButton", HighestButton+ " 2");
}
if(Button3.getHeight() > HighestButton){
HighestButton = Button3.getHeight();
Log.d("HighestButton", HighestButton+ " 3");
}
Button0.setHeight(HighestButton);
Button1.setHeight(HighestButton);
Button2.setHeight(HighestButton);
Button3.setHeight(HighestButton);
if (observer.isAlive()) {
observer.removeGlobalOnLayoutListener(this);
}
}
});
ViewTreeObserver observer = Button0.getViewTreeObserver();
observer.addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if(Button1.getHeight() > Button0.getHeight()){
Button0.setHeight(Button1.getHeight());
}
if(Button2.getHeight() > Button1.getHeight()){
Button0.setHeight(Button2.getHeight());
Button1.setHeight(Button2.getHeight());
}
if(Button3.getHeight() > Button2.getHeight()){
Button0.setHeight(Button3.getHeight());
Button1.setHeight(Button3.getHeight());
Button2.setHeight(Button3.getHeight());
}
}
});
动态更改文本是什么意思?你在按钮中调用设置文本,
所以我认为你可以在没有ViewTreeObserver的情况下设置文本后立即执行此操作