如何测量android中的视图宽度

时间:2011-08-22 14:57:22

标签: android android-layout android-widget

我在线性布局中有两个具有水平方向的文本视图。文本视图的宽度是wrap_content。如果两个文本视图的宽度之和小于屏幕宽度,则可以。如果宽度总和超过屏幕宽度,那么我需要将方向从水平更改为垂直。

我尝试在活动的onCreate中使用getWidth(),但它返回0.我可以尝试使用onSizeChanged()函数创建自定义视图,但我使用两个文本视图,所以我不确定当onSizeChanged()在一个文本视图不会确保完全绘制其他textview以获取宽度。任何建议对我都有帮助。

<LinearLayout android:id="@+id/status_container"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="horizontal"> 
    <TextView android:id="@+id/view1" 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"/>
    <TextView android:id="@+id/view2"
                    android:layout_height="wrap_content"
        android:layout_width="wrap_content"/>
</LinearLayout>

// In OnCreate() function
TextView view1 = (TextView) findViewById(R.id.view1);
TextView view2 = (TextView) findViewById(R.id.view2);
view1.setText("Good Morning,");
view2.setText("I am Ron");
int view1_width = view1.getWidth();
int view2_width = view2.getWidth();
if ((view1_width + view2_width) > screen_width) {
     // Change the Linear Layout orientation to Vertical
}

这里view1_width和view2_width返回0.我想检查view1_width + view2_width是否大于屏幕宽度然后我需要将方向更改为垂直方向,否则水平方向很好。

-Ron

1 个答案:

答案 0 :(得分:1)

将此添加到您的活动的onCreate

ViewTreeObserver vto = layout.getViewTreeObserver();
     vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
         @Override
             public void onGlobalLayout() {
                 //You should be able to get the width and height over here.

                 layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
             }
     });