在Android中简单膨胀到线性布局的问题?

时间:2016-10-26 15:48:58

标签: android android-linearlayout layout-inflater

我有这段代码:

<?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="0dp"
    android:layout_weight="1"
    android:background="#ff00ff"
    android:id="@+id/candyBox">
</LinearLayout>

我希望将上面的内容填充到1,2,3,4列中,如下所示:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="4"
    >
    <!-- 4 LAYERS of linear layout, ready to be inflated -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/column1"
        android:gravity="bottom">

    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/column2">

    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/column3">

    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/column4">

    </LinearLayout>
</LinearLayout>

我正在做这个简单的代码:

 LinearLayout column1 = (LinearLayout)findViewById(R.id.column1);
    View viewToLoad = getLayoutInflater().inflate(R.layout.candy_box, null);
    column1.addView(viewToLoad);

似乎没有任何事情发生,我的代码有什么问题吗?看起来很简单。如果我硬编码的东西,一切都很好,但我需要动态插入,有一种“Java”的方式,有这...我需要这样做,我不知道它是如何的问题总和。

为了让它更清晰,我的最终结果应该是:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:weightSum="5"
    android:id="@+id/column1"
    android:gravity="bottom">
       <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#ff00ff"
        android:id="@+id/candyBox">
    </LinearLayout>
    ...
</LinearLayout>

3 个答案:

答案 0 :(得分:1)

我认为问题在于外部布局的重量 - weightSum应该在内部布局的外部和layout_weight中。 为了确保您所做的是正确的,我还建议对内部布局进行硬编码,并在IDE的图形设计页面中查看布局。

更新2:我想要的应该是这样的:

Android studio layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:weightSum="4"
              android:background="#44000000"
    >
    <!-- 4 LAYERS of linear layout, ready to be inflated -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/column1"
        android:gravity="bottom"
        android:background="#33ffffff">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#ff00ff"
            android:id="@+id/candyBox1">
        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#0000ff"
            android:id="@+id/candyBox2">
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:id="@+id/column2"
        android:background="#22ffffff"
        android:gravity="bottom">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3"
            android:background="#ff0000"
            android:id="@+id/candyBox3">
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:gravity="bottom"
        android:id="@+id/column3">

    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="5"
        android:gravity="bottom"
        android:id="@+id/column4">

    </LinearLayout>

</LinearLayout>

答案 1 :(得分:1)

为什么在 LinearLayout 似乎是您的rootView元素时定义DataGridViewButtonColumn column = new DataGridViewButtonColumn(); column.Name = "Check-Out";

<强> 更新

看起来你倒了一些东西。你应该通过id candy_box 找到并以编程方式设置 column1

试试这个。

android:layout_weight="1"

答案 2 :(得分:0)

问题是xml的结构:

我的布局不在根对象中,因此我必须执行以下操作:

     column1 = (LinearLayout)findViewById(R.id.column1);
     View v = getLayoutInflater().inflate(R.layout.candy_box,column1 ,false);
     column1.addView(v);

false是键,表示它不是根元素。

解决!