如何根据ListView中的项目数使按钮的位置可移动

时间:2014-02-12 07:11:30

标签: android xml android-listview android-linearlayout relativelayout

在布局文件中,我有一个Listview,其大小可以动态增长/缩小。我有一个按钮btn_rec_add,它的点击事件我在ListView中添加了一个项目。我在布局文件中尝试了很多更改,但是无法根据ListView中的项目数使按钮移动其位置。如果我将按钮保持在具有ListView的相同RelativeLayout中,则按钮会动态移动,这正是我想要的但是在4.3英寸显示电话中添加5个或更多元素后我看不到按钮。如果我将按钮保持在ListView的RelativeLayout之外,那么它将固定在屏幕上。

目前,btn_rec_add固定在布局的底部。有人可以帮我解决这个问题。

以下是XML代码:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg" >

<ImageView
    android:id="@id/top_bar_view"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@drawable/top_bar"
    android:contentDescription="@string/content" />

<TextView
    android:id="@+id/txt_recipients"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="8dp"
    android:padding="8dp"
    android:text="@string/text_recipients"
    android:textColor="#FFFFFF"
    android:textSize="16sp" />

<ImageButton
    android:id="@id/btn_back"
    android:layout_width="80dp"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:contentDescription="@string/content"
    android:paddingTop="6dp"
    android:src="@drawable/ic_back" />

<RelativeLayout
    android:id="@+id/Rlayout_recipients"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/btn_rec_add"
    android:layout_alignParentLeft="true"
    android:layout_below="@id/top_bar_view" >

    <ListView
        android:id="@+id/rec_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:paddingTop="20dp" />
</RelativeLayout>

<ImageButton
    android:id="@+id/btn_rec_add"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:contentDescription="@string/content"
    android:src="@drawable/icon_add" />

</RelativeLayout>

How it looks currently

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望按钮的行为如下:

  • 如果ListView未延伸到填充屏幕,则显示在最后ListView项目下方
  • 如果ListView延伸到屏幕的整个高度,则按钮应位于屏幕的底部,但列表应保持可滚动状态

如果我的理解是正确的,您应该将ListView和按钮放在LinearLayout中,如下所示:

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

    <ListView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <Button 
        android:layout_width="match_parent" 
        android:layout_height="@dimen/button_height"
        android:background="@drawable/button_image" />

</LinearLayout>

以上布局的效果如下:

  • 垂直放置项目的布局
  • 布局,与父级一样宽,但与ListViewButton
  • 一样高
  • ListView将占用按钮未占用的布局中的所有空间(这是layout_weight="1",而Button没有布局权重,因此它只会填充尽可能多的空间因为它需要@dimen/button_height
  • 在这种情况下的定义

很棒的Android布局问题!

答案 1 :(得分:-1)

您的问题与用户体验有关。 您必须决定用户是否要滚动到列表的末尾以按添加按钮 或用户想要添加而不滚动到列表的末尾。 由于您的方案只有两个选项, 要么保持添加按钮固定,要么将其添加为列表视图的页脚。