我想获取一个按钮的宽度,该按钮的 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
。更多信息请参见:https://dev59.com/LWQo5IYBdhLWcg3wR9nD#16190337。 - harsimranb