我们可以在 onCreate() 中获取视图高度吗
Can we get a view height in onCreate()
我们可以在 onCreate() 中获取视图高度吗?我正在尝试使用 view.getHeight() 查找视图的高度,但它在调试器中显示为 0
ViewTreeObserver 会因不同的绘图事件而被触发。通常 OnGlobalLayoutListener 是您想要获得测量值的东西
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
view.getHeight(); //height is ready
}
});
您可以在视图class创建时找到它的高度。换句话说,你必须在 View#post() 方法中计算它。
view.post(new Runnable() {
@Override
public void run() {
// Find height here
// e.g
// view.getHeight();
}
});
您似乎在问两个不同的问题。一旦您的布局膨胀,您的视图就会实例化。这意味着在调用 setContentView()
之后,您可以立即使用 findViewById()
检索它们并调用它们的方法(例如 setText()
等)。
然而,虽然目前 存在 意见,但尚未展开。只有在视图通过布局通道后,它们才会具有真正的位置和尺寸值。
正如 Ayush 的回答所说,通过为您感兴趣的视图注册 ViewTreeObserver.OnGlobalLayoutListener
,您可以在布局过程完成时收到通知。
我们可以在 onCreate() 中获取视图高度吗?我正在尝试使用 view.getHeight() 查找视图的高度,但它在调试器中显示为 0
ViewTreeObserver 会因不同的绘图事件而被触发。通常 OnGlobalLayoutListener 是您想要获得测量值的东西
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
view.getHeight(); //height is ready
}
});
您可以在视图class创建时找到它的高度。换句话说,你必须在 View#post() 方法中计算它。
view.post(new Runnable() {
@Override
public void run() {
// Find height here
// e.g
// view.getHeight();
}
});
您似乎在问两个不同的问题。一旦您的布局膨胀,您的视图就会实例化。这意味着在调用 setContentView()
之后,您可以立即使用 findViewById()
检索它们并调用它们的方法(例如 setText()
等)。
然而,虽然目前 存在 意见,但尚未展开。只有在视图通过布局通道后,它们才会具有真正的位置和尺寸值。
正如 Ayush 的回答所说,通过为您感兴趣的视图注册 ViewTreeObserver.OnGlobalLayoutListener
,您可以在布局过程完成时收到通知。