无法以编程方式重建XML布局

时间:2015-03-24 19:50:06

标签: android android-layout

首先,我制作了一个XML文档并在那里设计了我的布局。它运作完美,在这里:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/scrollView">
        <LinearLayout
                android:id="@+id/list"
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
            <LinearLayout style="@style/Row">
                <LinearLayout style="@style/EntryContainer">
                    <ImageView style="@style/Pic"
                               android:id="@+id/imageView42" android:src="@drawable/ic_launcher"/>
                    <TextView style="@style/Rate"/>
                </LinearLayout>
                <LinearLayout style="@style/EntryContainer">
                    <ImageView style="@style/Pic"
                               android:id="@+id/imageView423" android:src="@drawable/ic_launcher"/>
                    <TextView style="@style/Rate"/>
                </LinearLayout>
            </LinearLayout>
            <LinearLayout style="@style/Row">
                <LinearLayout style="@style/EntryContainer">
                    <ImageView style="@style/Pic"
                               android:id="@+id/imageView2" android:src="@drawable/ic_launcher"/>
                    <TextView style="@style/Rate"/>
                </LinearLayout>
                <LinearLayout style="@style/EntryContainer">
                    <ImageView style="@style/Pic"
                               android:id="@+id/imageView3" android:src="@drawable/ic_launcher"/>
                    <TextView style="@style/Rate"/>
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

还有风格:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Row">
        <item name="android:orientation">horizontal</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
    </style>

    <style name="EntryContainer">
        <item name="android:orientation">vertical</item>
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">fill_parent</item>
        <item name="android:layout_weight">1</item>
    </style>

    <style name="Pic">
        <item name="android:layout_width">100dp</item>
        <item name="android:layout_height">100dp</item>
        <item name="android:layout_gravity">center_horizontal</item>
    </style>

    <style name="Rate">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:text">@string/underpic_rate</item>
        <item name="android:gravity">center_horizontal</item>
    </style>
</resources>

好的,但我需要在运行时添加这些行,所以首先我尝试创建新的视图并将具体样式传递给它的构造函数(第3个参数)。它没有工作。看起来它根本没有添加任何风格。

然后我尝试使用LayoutParams,它几乎可以工作,但我无法改变LinearLayouts的方向。当我做类似的事情时:

myLinearLayoutObject.setOrientation(LinearLayout.HORIZONTAL);

它只是听不到我的声音。

我可以发布更多代码,但我不确定是否需要。 基本上我不知道为什么将样式传递给View的构造函数不起作用。这将是最简单的解决方案。

2 个答案:

答案 0 :(得分:1)

您应该考虑使用RecyclerView。这将允许您具有基于基础数据集自动生成的类似视图元素的列表。

如果你有一组动态的列表元素会在整个应用程序的运行时间内发生变化,那么这将提供一个比你自己手动创建一个包含视图的列表更加灵活和优雅的解决方案

学习需要更多时间,但从长远来看,这是值得的。

答案 1 :(得分:1)

您可以使用LayoutInflater。

创建另一个表示行的xml布局文件--firstrow.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          style="@style/Row">
            <LinearLayout style="@style/EntryContainer">
                <ImageView style="@style/Pic"
                           android:id="@+id/imageView42" android:src="@drawable/ic_launcher"/>
                <TextView style="@style/Rate"/>
            </LinearLayout>
            <LinearLayout style="@style/EntryContainer">
                <ImageView style="@style/Pic"
                           android:id="@+id/imageView423" android:src="@drawable/ic_launcher"/>
                <TextView style="@style/Rate"/>
            </LinearLayout>
        </LinearLayout>    

然后在你的代码中执行以下操作:

LayoutInflater inflater = getActivity().getLayoutInflater();
LinearLayout rootView=(LinearLayout)inflater.inflate(R.layout.firstrow, null);
final LinearLayout container = (LinearLayout)findViewById(R.id.list);
container.addView(rootView);