将布局膨胀到另一个布局(或将布局转换为视图然后使视图膨胀)

时间:2012-10-29 23:02:20

标签: java android xml

我想使用循环将布局多次充气到另一个布局。当我给TextView或任何其他单个视图充气时,java很好。但我想夸大整个布局。我使用什么方法,因为以下代码不起作用。 (就像我说的,循环和一切都很好,它只是我不能给整个布局充气。我只知道如何给一个简单的视图充气。)

View childInflatedView = (View) theInflater.inflate(R.id.restaurant_displayed_on_list, null);
linLayout.addView(childInflatedView);
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal"
android:background="@drawable/gradient_bg_hover"
android:id="@+id/restaurant_displayed_on_list" >

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_weight="6"
    android:layout_height="fill_parent"
    android:text="this is the inflated text"
    android:textColor="#990099"
    android:textSize="20dp"
    android:gravity="center_horizontal"

    />

<Button    
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="fill_parent"
android:background= "@drawable/delete"
/>
</LinearLayout>

EDIT1:

正如Matthew所说,我认为解决方案是通过布局资源ID来扩充布局。 我认为问题在于上面没有显示的代码行,因为布局不能转换为TextView:

View categoryInflatedView1 = (View) theInflater.inflate(R.layout.categories_available, null);

((TextView) categoryInflatedView1).setText(category1);          

linLayout.addView(categoryInflatedView1);

如何访问布局内的TextView。我需要在充气之前编辑textview。

3 个答案:

答案 0 :(得分:2)

您需要传入布局资源ID。将R.id.restaurant_displayed_on_list替换为R.layout.<name of your layout file here>,您应该好好去。

答案 1 :(得分:1)

因此,这不起作用的原因是2倍。

您只需通过Mathew

所述的布局资源ID来扩充布局
View childInflatedView = (View) theInflater.inflate(R.layout.restaurant_available, null);

由于将布局转换为TextView,我在日志中发现了一个额外的错误 相反,我必须使用此代码使其工作(布局变量然后按ID查找视图):

((TextView) childInflatedView.findViewById(R.id.restaurant_displayed_on_list)).setText(currentlyDelRest1);

虽然这个答案是正确的,但我会将接受的答案分配给Mathew,因为根据问题中提供的信息,他的回答是正确的。谢谢你的帮助

答案 2 :(得分:0)

使用<include>标记。它包含现有的XML布局。例如,添加以下两行将包括父布局中的另外两个布局:

 <include android:id="@+id/cell1" layout="@layout/workspace_screen" />
<include android:id="@+id/cell2" layout="@layout/workspace_screen" />

只需要布局属性。没有android命名空间前缀的此属性是对要扩展的布局文件的引用。您还可以使用android:id指定所包含布局的根视图的ID;如果定义了布局,它也会覆盖包含布局的id。同样,您可以覆盖所有布局参数。