如何使用堆叠的GridView创建50/50垂直布局?

时间:2013-10-09 17:27:42

标签: android gridview

我的一个DialogFragments实现了两个大小相等的GridView,一个堆叠在另一个上面。理想情况下,我的布局看起来像这样(如Android Studio中所示): The layout as seen in Android Studio

不幸的是,当我在实际的Android设备上加载布局时,我会得到这样的结果: The same layout on Android

Kanji GridView为空时,它完全不可见。此外,它的高度取决于它必须显示的元素数量。如何按照Android Studio中的布局强制底部GridView填充50%的高度,即使它是空的?

以下是此特定布局的XML:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/kanji_lookup_root"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:focusableInTouchMode="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ProgressBar
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:id="@+id/progress_bar"
            android:layout_toStartOf="@+id/search_box_kanji"
            android:visibility="gone"
            android:indeterminate="true"
            android:layout_centerVertical="true"/>

        <SearchView
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:id="@id/search_box_kanji"
            android:queryHint="@string/menu_search_hint"
            android:iconifiedByDefault="false"
            android:layout_centerHorizontal="true"/>

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            style="@style/EntryDetailsHeader"
            android:text="@string/components" />

        <com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView
            android:id="@+id/grid_components"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:numColumns="9"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            style="@style/EntryDetailsHeader"
            android:text="@string/kanji" />

        <GridView
            android:id="@+id/grid_kanji"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:numColumns="9"/>

    </LinearLayout>

</LinearLayout>

(顺便说一句,我使用StickyGridHeaders library作为上层组件 GridView)

2 个答案:

答案 0 :(得分:0)

将两个LinearLayouts上的'0dp'layout_height更改为'match_parent'。

答案 1 :(得分:0)

您在最外层的weightSum <:p>上缺少LinearLayout个属性

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/kanji_lookup_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusableInTouchMode="true"
    android:orientation="vertical"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:weightSum="2" > <!-- This line is what you were missing -->
    ...
</LinearLayout>

在设备上进行测试(假设您的EntryDetailsHeader样式设置match_parent宽度和wrap_content高度。