gpt4 book ai didi

Android:通过 ViewTreeObserver 设置 View 高度

转载 作者:太空狗 更新时间:2023-10-29 14:02:06 28 4
gpt4 key购买 nike

我有两个表:TableA 和 TableB。 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);
}
}
});
}

关于Android:通过 ViewTreeObserver 设置 View 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com