在添加控件之前获取窗口大小

时间:2012-12-08 16:23:12

标签: android android-layout android-view

我有一个带有公共函数的自定义视图,它将控件添加为视图的子项,我想从我的活动中调用它。问题是我需要知道函数中视图的大小才能放置控件。我无法覆盖onMeasure来获取度量,因为我的视图继承自另一个自定义视图,其中此函数是最终的。我尝试重写measureChildren,但是它被调用得太晚了(甚至在放置视图的活动的onResume之后)。在活动调用视图中的函数之前,我该怎么做才能获得大小?

2 个答案:

答案 0 :(得分:0)

如果您想要显示尺寸(以像素为单位),可以使用getSize:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

答案 1 :(得分:0)

一种可能性是在活动中测量您的视图,然后为视图的内部方法设置视图的属性。

使用全局布局侦听器一直很适合我。它具有能够在布局改变时重新测量事物的优点,例如,如果某些内容设置为View.GONE或添加/删除子视图。

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);

     // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is
     LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 

     // set a global layout listener which will be called when the layout pass is completed and the view is drawn
     mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
     new ViewTreeObserver.OnGlobalLayoutListener() {
          public void onGlobalLayout() {
               // at this point, the UI is fully displayed
          }
     }
 );

 setContentView(mainLayout);

http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html