1

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

4

2 回答 2

0

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

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
于 2012-12-08T16:28:43.210 回答
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

于 2012-12-08T16:45:43.803 回答