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