【发布时间】:2011-12-08 05:30:22
【问题描述】:
我正在尝试获取将android:layout_width 设置为wrap_content 的按钮的宽度。当我尝试在onCreate() 中使用getMeasuredWidth() 执行此操作时,我得到的值为零,因为我认为视图尚未准备好。
那么我应该什么时候得到宽度呢?当视图完成初始化时,我可以挂接任何侦听器吗?
【问题讨论】:
我正在尝试获取将android:layout_width 设置为wrap_content 的按钮的宽度。当我尝试在onCreate() 中使用getMeasuredWidth() 执行此操作时,我得到的值为零,因为我认为视图尚未准备好。
那么我应该什么时候得到宽度呢?当视图完成初始化时,我可以挂接任何侦听器吗?
【问题讨论】:
您可以在布局中添加树观察者。这应该返回正确的宽度和高度。在子视图的布局完成之前调用 onCreate。所以宽度和高度还没有计算出来。获取高度和宽度。把它放在 onCreate 方法上
LinearLayout layout = (LinearLayout)findViewById(R.id.YOUD VIEW ID);
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = layout.getMeasuredWidth();
int height = layout.getMeasuredHeight();
}
});
【讨论】:
removeGlobalOnLayoutListener 在较新的 API 中已弃用,现在为 removeOnGlobalLayoutListener。欲了解更多信息:stackoverflow.com/a/16190337/487940