Android GridLayout水平填充动态片段

时间:2015-01-06 03:57:54

标签: android android-layout android-gridlayout

我正在尝试使用GridLayout布局Android屏幕,这是一个模拟布局,显示了我要完成的任务:

Layout Mockup

我将该模型转换为布局,这是在模拟器中运行的结果:

enter image description here

我希望中心的黑色组件尽可能多地使用水平空间,就像模拟布局一样。但正如您所看到的,右边的白色组件正在使用所有可用的水平空间。

我在日志中收到此错误:

01-06 08:27:38.045: D/android.widget.GridLayout(7745): horizontal constraints: x2-x0>=71, x1-x0>=64, x2-x1>=128, x3-x2>=1280, x3-x0<=1280 are inconsistent; permanently removing: x3-x0<=1280.

我正在使用2 FrameLayout个组件作为动态加载的Fragments的占位符。因此,例如,根据在红色面板中单击的按钮,将不同的片段加载到黑色面板中。我看到的另一个相关问题是黑色面板将根据加载的片段中有多少个按钮来改变大小。

如果可能的话,我更愿意使用GridLayout,但也许我想用GridLayout做什么是不可能的?我试图让这个布局使用线性和相对布局,但无法正确使用。

这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnCount="3">

    <FrameLayout
        android:id="@+id/category_placeholder"
        android:layout_column="0"
        android:layout_gravity="fill_vertical"
        android:background="#0f0"
        android:gravity="start"
    />

    <FrameLayout
        android:id="@+id/menu_item_placeholder"
        android:layout_column="1"
        android:layout_gravity="fill_horizontal|fill_vertical"
        android:background="#00f"
        android:gravity="start"
    />

    <fragment
        android:id="@+id/cart"
        android:layout_column="2"
        android:layout_gravity="fill_vertical"
        android:layout_rowSpan="2"
        class="com.example.splitscreen.OrderFragment"
        android:background="#4b0082"
        android:gravity="end" />

    <TextView
        android:id="@+id/xxx"
        android:layout_column="0"
        android:layout_columnSpan="2"
        android:layout_gravity="fill_horizontal"
        android:layout_row="1"
        android:background="#0f0"
        android:gravity="center"
        android:padding="25dp"
        android:text="xxx"
        android:textColor="#0f0" >
    </TextView>
</GridLayout>

1 个答案:

答案 0 :(得分:0)

我不确定这是不是最好的&#34;方法与否,但我最终通过回到使用嵌套LinearLayout来解决这个问题。这似乎给了我想要/需要的东西,允许我通过提供权重按比例调整我的组件。我花了一点时间来掌握它,但我终于明白了。这是结果如下:

Nested LinearLayout

这里是布局xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true"
    android:baselineAligned="false"
    android:orientation="vertical"
    android:weightSum="8"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="6"
        android:baselineAligned="false"
        android:orientation="horizontal"
        android:weightSum="8" >

        <FrameLayout
            android:id="@+id/category_placeholder"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="@android:color/holo_red_dark"
            android:gravity="center"
            android:textColor="#000" >
        </FrameLayout>

        <FrameLayout
            android:id="@+id/menu_item_placeholder"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="5"
            android:background="#00f"
            android:gravity="center"
            android:textColor="#fff" >
        </FrameLayout>

        <fragment
            android:id="@+id/cart"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="2"
            class="com.example.splitscreen.OrderFragment"
            android:background="#4b0082"
            android:gravity="center"
            android:textColor="#fff" >
        </fragment>
    </LinearLayout>

    <TextView
        android:id="@+id/xxx"
        android:background="#0f0"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:padding="25dp"
        android:text="xxx"
        android:textColor="#0f0" >
    </TextView>
</LinearLayout>

一个小小的警告似乎是我得到了一个警告&#34;嵌套的重量不利于性能&#34;,但此刻这似乎是我可以开始工作和布局的最佳/唯一选择就像我想要的那样。