Inflater膨胀,但高度很小(看起来像wrap_content,需要fill_parent)

时间:2011-10-13 10:19:05

标签: android

我有布局,我想夸大那个

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
>
    <EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    >       
    </EditText>

</LinearLayout>

喜欢

    LinearLayout ll=(LinearLayout)findViewById(R.id.llContainer);
    View view; 
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.question_free_text, null);
    ll.addView(view);

其中ll是

<LinearLayout
    android:id="@+id/llContainer"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
>
</LinearLayout>

在其他xml中,但问题是当它膨胀时显示但高度很大(fill_parent,它看起来像wrap_content,但布局中没有wrap_content)。有人能帮助我吗?

1 个答案:

答案 0 :(得分:14)

正如Yashwanth Kumar在评论中正确提到的那样,inflate-method的第二个参数应该是插入新视图的根视图:

LinearLayout ll = (LinearLayout) findViewById(R.id.llContainer);
View view;
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.question_free_text, ll);

如果在inflate-call中提供了根视图,则LayoutInflator将调用此根视图的generateLayoutParams(ViewGroup.LayoutParams p)方法以获取一些LayoutParams(基本上包含有关视图可以/应该有多大的信息),这将是传递到新视图。

请注意,如果您提供根视图,则膨胀的视图将通过root.addView(View child, LayoutParams params)自动添加到根视图。

您还可以将第三个参数传递给inflate-method(boolean attachToRoot),如果此值为false,则新视图不会自动添加到根视图中,但LayoutParams是仍然设置为setLayoutParams(params)。您可以使用此方法将手动视图添加到根视图(例如,在特定位置/索引处):

LinearLayout ll = (LinearLayout) findViewById(R.id.llContainer);
View view;
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.question_free_text, ll, false); // the LayoutParams of view are set here
ll.addView(view, 2);