如何在Android ListView的末尾显示一个按钮

时间:2010-03-05 12:21:54

标签: android listview

我想在Android列表视图的末尾显示一个按钮。我怎样才能做到这一点?

我不想使用alignparentbottom="true"将其粘贴到活动底部。使用layout_below对我来说也不起作用。

我目前的XML:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/main_bg">

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <ListView
            android:id="@+id/android:list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawSelectorOnTop="false"
            android:cacheColorHint="#ff6a00"
            android:divider="#ff8f40"
            android:dividerHeight="1px" />

    </LinearLayout>

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
            android:layout_height="50sp"
        android:background="#676767"
        android:orientation="vertical">

        <Button
            android:layout_width="100px"
            android:layout_height="wrap_content"
            android:id="@+id/btnGetMoreResults"
            android:layout_marginLeft="10px"
            android:text="Get more" />

    </RelativeLayout>

</RelativeLayout>

9 个答案:

答案 0 :(得分:74)

您可能希望使用ListView#addFooterView()View底部添加ListView

答案 1 :(得分:34)

我就像屏幕底部的固定按钮一样

   <RelativeLayout
    android:id="@+id/relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/btn_New" >
    </ListView>

    <Button
        android:id="@+id/btn_New"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginBottom="20dp"
        android:text="@string/New"
        android:width="170dp"
        android:layout_alignParentBottom="true" />
</RelativeLayout>

如果你使用linearLayout然后将android:layout_weight =“1”分配给listview并且不为它工作的按钮指定权重

答案 2 :(得分:15)

你可以这样做:

final Button btnAddMore = new Button(this);
btnAddMore.setText(R.string.art_btn_moreIssues);
exArticlesList = (ExpandableListView) this.findViewById(R.id.art_list_exlist);
exArticlesList.addFooterView(btnAddMore);

答案 3 :(得分:7)

1如果要将Button添加为列表视图的最后一个元素

您必须为ListView创建自定义ListAdapter,这将在getView方法中使用Button创建视图。您应该决定如何返回最后一个元素的自定义视图,您可以对其进行硬编码(在getCount方法中返回元素计数+1并在位置&gt;元素计数时返回getView中的自定义视图)或者您可以将元素添加到结构中从(Array,Cursor等)获取数据并检查元素字段是否具有特定值

2如果要在列表视图下方添加元素

您应该使用android:layout_width属性并使ListView和“空”TextView(您应该使用它来向用户显示列表为空并且View渲染已完成)layout_weight大于按钮layout_weight

检查Transdroids搜索活动http://code.google.com/p/transdroid/source/browse/trunk/res/layout/search.xml

中的工作方式

答案 4 :(得分:6)

使用页脚视图列表 - 查看它是否有效。

list_layout.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:cacheColorHint="#ff6a00"
        android:divider="#ff8f40"
        android:dividerHeight="1px" />

</LinearLayout>

footerview.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
    <Button
        android:layout_width="100px"
        android:layout_height="wrap_content"
        android:id="@+id/btnGetMoreResults"
        android:layout_marginLeft="10px"
        android:text="Get more" />
</FrameLayout>

并在Activity.java中

    list=(ListView)findViewById(R.id.list);

    FrameLayout footerLayout = (FrameLayout) getLayoutInflater().inflate(R.layout.footerview,null);
    btnPostYourEnquiry = (Button) footerLayout.findViewById(R.id.btnGetMoreResults);

    list.addFooterView(footerLayout);

答案 5 :(得分:4)

简单地提供&#34; layout_weight = 1&#34; ListView。

示例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:cacheColorHint="#ff6a00"
        android:divider="#ff8f40"
        android:layout_weight="1"
        android:dividerHeight="1px" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="#ff8f40"
        android:padding="20dp"
        android:text="Click"
        android:textColor="#FFFFFF"
        android:textSize="22sp"
        />
</LinearLayout>

答案 6 :(得分:3)

我来到这里寻找答案,但在其他地方找到了......

这很简单,你只需要在线性布局中将重量1放到列表中,其他textviews / buttons / etc就不需要有任何重量值。

以下是一个示例:https://bitbucket.org/generalplus/android_development/src/5a892efb0551/samples/ApiDemos/res/layout/linear_layout_9.xml

答案 7 :(得分:0)

当然,您可以使用自定义适配器并指定页脚项。但是你可能还可以把它放在ScrollView的底部并且ListView拉伸到内容垂直:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/main_bg">

  <ScrollView
      android:layout_height="fill_parent"
      android:layout_width="fill_parent">

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

      <ListView android:id="@+id/android:list"
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content"
          android:drawSelectorOnTop="false" 
          android:cacheColorHint="#ff6a00"
          android:divider="#ff8f40"
          android:dividerHeight="1px"
          />

      <RelativeLayout 
          android:layout_width="fill_parent"
          android:layout_height="50sp"
          android:background="#676767"
          android:orientation="vertical">

        <Button android:layout_width="100px"
            android:layout_height="wrap_content"
            android:id="@+id/btnGetMoreResults"
            android:layout_marginLeft="10px"
            android:text="Get more" />

      </RelativeLayout>

    </LinearLayout>

  </ScrollView>

</RelativeLayout>

答案 8 :(得分:0)

嗯......如果你想在列表的末尾创建一个平滑的“添加更多”按钮,那么实现的细节就不那么容易了。所以这里有一些代码:

myArrayAdapter = new ArrayAdapter<Show>(this, android.R.layout.simple_list_item_1, myList) {

     @Override
     public View getView(int position, View convertView, ViewGroup parent) {

        if( position >= super.getCount()  )
            return buttonMore ;

        MyNormalView view = null; 
        if (convertView == null || convertView instanceof Button )
            view = new MyNormalView(getContext());
        else
            view = (MyNormalView) convertView;

        //customize view here with data
        return view;
    }

    @Override
    public int getCount() {
       return super.getCount()+1;
    }//met
};