在Activity
中,我手动从XML中扩充View
对象,如下所示:
LayoutInflater inflater = LayoutInflater.from (this);
View topView = inflater.inflate (R.layout.topview_layout, null);
我不会将视图添加到任何显示层次结构,而是使用它来生成我将显示的位图。由于这些位图将是我(主)屏幕的大小,我尝试使布局发生:
Display display = ((WindowManager) getSystemService (Context.WINDOW_SERVICE))
.getDefaultDisplay();
topView.measure (display.getWidth (), display.getHeight ());
topView.layout (0, 0, display.getWidth (), display.getHeight ());
(在上面的代码中显示正确的显示尺寸。)
topView
是LinearLayout
,其中包含一些其他观点。其中一个是ImageView
:
ImageView childView = (ImageView) pageView.findViewById (R.id.textArea);
但是,在调用layout()
之后,似乎从未通知此视图的尺寸:
int childViewWidth = childView.getWidth ();
int childViewHeight = childView.getHeight ();
(上述代码检索的尺寸为0,0。)
以上所有代码都是线性发生的,并且是在我的Activity子类'onCreate()
方法中调用的。
我正在测试的布局XML是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topView"
android:orientation="vertical"
android:background="@color/blue"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/textArea"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gold"/>
</LinearLayout>
我非常感谢任何线索!
注意:已修改为Romain Guy添加布局XML和measure()
调用指出的消息。
答案 0 :(得分:4)
在调用layout()之前,需要调用measure()。
答案 1 :(得分:1)
首先,inflate不会考虑您在xml中指定的布局参数。您可以使用
inflater.inflate( R.layout.top_view_layout /* resource id */, parentView, false /* attachToRoot */);
来解决这个问题
这将确保您使用match_parent进行宽度和高度。
OR
如果您不想这样做,那么您应该首先为膨胀的视图设置LayoutParams。
PS:AFAIK,布局方法将采用可用于显示的屏幕区域的参数(左,上,右,下),但它会考虑用于显示的视图的原始大小(在您的显示中为0,0)情况)。