Android - 获取设置为wrap_content的按钮宽度

5

我想获取一个按钮的宽度,该按钮的 android:layout_width 属性设置为 wrap_content。当我在 onCreate() 中使用 getMeasuredWidth() 时,我得到了零值,因为我认为视图还没有准备好。

那么我应该什么时候获取宽度呢?是否有任何监听器可以在视图初始化完成时挂接?

1个回答

13

您可以向布局添加一个树形观察器,这样应该能够返回正确的宽度和高度。在创建视图的布局完成之前,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();  

    }  
}); 

1
FYI:removeGlobalOnLayoutListener在新的API中已经被弃用,现在是removeOnGlobalLayoutListener。更多信息请参见:https://dev59.com/LWQo5IYBdhLWcg3wR9nD#16190337。 - harsimranb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接