Android 布局XML: 列表视图下方的分隔线
Android Layout XML: Divider below Listview
由于应用程序的设计,我需要执行以下操作:
(我尽可能地减少了问题 - 并搜索了其他答案,但还没有准确地找到我的问题)
正如你在图片中看到的,我有以下组件:
- 列表视图
- 固定大小为 1dp 的 GreenDivider
- Button-Area
列表视图在顶部,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>
由于应用程序的设计,我需要执行以下操作:
(我尽可能地减少了问题 - 并搜索了其他答案,但还没有准确地找到我的问题)
- 列表视图
- 固定大小为 1dp 的 GreenDivider
- Button-Area
列表视图在顶部,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>