Android 布局XML: 列表视图下方的分隔线

Android Layout XML: Divider below Listview

由于应用程序的设计,我需要执行以下操作: (我尽可能地减少了问题 - 并搜索了其他答案,但还没有准确地找到我的问题) 正如你在图片中看到的,我有以下组件:

列表视图在顶部,button-area 在底部,它们之间是分隔线。 Listview 的大小是可变的。 以下是困难的部分: 分隔线始终可见。 分隔线必须始终位于 button-area 之上。如果列表视图不使用整个可用 space,分隔符必须正好在列表视图下方。如果列表视图使用的 space 多于可用的数量,则分隔符必须恰好位于 button-area 之上。当然,列表视图应该是可滚动的。

我在相对布局和线性布局中尝试了很长时间。如果您有解决方案,请与我分享您的想法。

下面是布局的一部分,但实际上并没有达到预期效果:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ListView
            android:id="@+id/notification_action_listview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/navigation_item_background_selector"
            android:divider="@null"
            android:dividerHeight="0dp"
            android:orientation="vertical" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/divider_layout"
        android:layout_width="fill_parent"
        android:layout_height="1dp" >

        <include
            android:id="@+id/divider"
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            layout="@layout/divider_horizontal_green" />
    </LinearLayout>

   <LinearLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center|bottom"
        android:orientation="vertical" >

        <Button
            android:id="@+id/notification_action_remove_button"
            style="@style/flat_button_red_rounded"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/margin_big"
            android:paddingLeft="@dimen/margin_big"
            android:paddingRight="@dimen/margin_big"
            android:text="@string/delete_account" />


    </LinearLayout>
</LinearLayout>

我会声明两个分隔符并给它们每个一个 id。

然后,我将以编程方式检查列表视图的大小与其容器的大小。

如果列表视图比容器大,我会让分隔符停在按钮上方 "visible" 和列表视图下方 "gone"

等...

老实说,我可能只是将它对齐到按钮上方,然后就此结束。

使用相对布局作为顶层。将页脚设置为 alignBottom,将包含 Listview 和分隔符的 LinearLayout 设置为 layout_above="@id/footer"。我已经编辑了你的 xml 来解决你的问题(我认为它的格式正确但 SO 不是最好的编辑器)。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:alignParentTop="true"
    android:layout_above="@id/footer">

    <ListView
        android:id="@+id/notification_action_listview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/navigation_item_background_selector"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:orientation="vertical" />

    <include
        android:id="@+id/divider"
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        layout="@layout/divider_horizontal_green" />
</LinearLayout>

<LinearLayout
    android:id="@+id/footer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="true"
    android:orientation="vertical" >

    <Button
        android:id="@+id/notification_action_remove_button"
        style="@style/flat_button_red_rounded"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/margin_big"
        android:paddingLeft="@dimen/margin_big"
        android:paddingRight="@dimen/margin_big"
        android:text="@string/delete_account" />


</LinearLayout>
</RelativeLayout>