我有两个表:表 A 和表 B。 TableA 的第一行高度为 22,TableB 的第一行高度为 77。我想将 TableA 的第一行等同于 TableB 的第一行,为此我使用下面的代码:
void resizeHeaderHeight() {
final int[] heightA = new int[1];
final int[] heightB = new int[1];
TableRow TableA_Row = (TableRow) this.tableA.getChildAt(0);
TableRow TableB_Row = (TableRow) this.tableB.getChildAt(0);
final TextView textViewA = (TextView) TableA_Row.getChildAt(0);
final TextView textViewB = (TextView) TableB_Row.getChildAt(0);
ViewTreeObserver vto = textViewB.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
textViewA.getViewTreeObserver();
textViewB.getViewTreeObserver();
heightA[0] = textViewA.getMeasuredHeight();
heightB[0] = textViewB.getMeasuredHeight();
Log.d(TAG, "TableA_Row height = " + heightA[0]);
Log.d(TAG, "TableB_Row height = " + heightB[0]);
textViewA.setHeight(heightB[0]);
}
});
}
但我怀疑这是否是正确的做法?
因为当我查看 logcat 时,它总是打印我的日志,但是如果我删除textViewA.setHeight(heightB[0]);
它只打印一次日志。
假设您的布局设计正确,并且这种设置高度的方式textViewB
是你真正想一起去的人吗...
你应该删除OnGlobalLayoutListener
一旦不再需要它。你没有这样做,而且onGlobalLayout
任何变化都会调用回调ViewTree
布局。所以回答你的问题:你使用的方式ViewTreeObserver
不是最好的...
这种方式会更好:
void resizeHeaderHeight() {
TableRow TableA_Row = (TableRow) this.tableA.getChildAt(0);
TableRow TableB_Row = (TableRow) this.tableB.getChildAt(0);
final TextView textViewA = (TextView) TableA_Row.getChildAt(0);
final TextView textViewB = (TextView) TableB_Row.getChildAt(0);
textViewB.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightB = textViewB.getHeight();
if (heightB > 0) {
// removing OnGlobalLayoutListener
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
textViewB.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
textViewB.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
// setting height
textViewA.setHeight(heightB);
}
}
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)