手动充气视图上的layout()

时间:2011-03-23 17:15:47

标签: android layout view

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 ());

(在上面的代码中显示正确的显示尺寸。)

topViewLinearLayout,其中包含一些其他观点。其中一个是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()调用指出的消息。

2 个答案:

答案 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)情况)。