即使在删除行之后,如何将按钮对齐到ListView底部仍然粘在底部?

时间:2014-06-30 05:14:55

标签: android android-listview android-button

我正在尝试创建一个包含ListView的布局,其下方有一个按钮,并且还可以使按钮“粘贴”到ListView的底部,即使我添加或删除了ListView中的行。

使用下面的布局代码,当我向列表添加新行时,按钮“移动”到ListView底部正下方的正确位置。所以这很好。

问题是,当我从ListView中删除一行时,按钮会保持原样,并且不会“向上移动”,因此它会粘在ListView的底部。当我旋转设备并重新创建视图时,按钮实际上会向上移动,但我希望它在删除行时自动向上移动。

以下是我现在的代码:

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

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.0" />           

    <ImageButton
        android:id="@+id/addButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/add_button" />

</LinearLayout>

SOLUTION:

解决方案是创建一个只包含按钮的小布局文件,然后以编程方式将其添加为ListView的页脚。

在我的片段中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) 
{ 

    ...

    View footerView = inflater.inflate(R.layout.listview_footer, null, false);

    addButton = (ImageButton) footerView.findViewById(R.id.addButton);

    listView.addFooterView(footerView);

    data = getListViewData();

    adapter = new MyListAdapter(getActivity(), data);

    listView.setAdapter(adapter);

    ...

}

listview_footer.xml:

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

<ImageButton
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/addButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/add_button" />

listview_footer.xml只包含按钮,没有布局。

现在,当我从ListView删除一行时,按钮会向上移动到“粘贴”到ListView的底部。和以前一样,当我向ListView添加一行时,按钮会向下移动。

4 个答案:

答案 0 :(得分:1)

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

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         />           

    <ImageButton
        android:id="@+id/addButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below= "@+id/listView"
        android:src="@drawable/add_button" />

</RelativeLayout>

答案 1 :(得分:1)

用户RelativeLayout。将android:layout_alignParentBottom="true"添加到图像按钮,将android:layout_above="@+id/addButton"添加到listView

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

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
    android:layout_above="@+id/addButton"
 android:layout_alignParentTop="true"/>           

        <ImageButton
            android:id="@+id/addButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/add_button" 
            android:layout_alignParentBottom="true"

    />

    </RelativeLayout>

答案 2 :(得分:1)

您可以将按钮添加到列表视图的页脚。

View footerView = View.inflate(this, R.layout.footer, null);
listview.addFooterView(footerView);

为页脚视图创建一个xml文件,您可以根据UI需要添加一个按钮。

Footer.xml可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 android:padding="5dip">

 <Button android:id="@+id/previous"
  android:layout_width="wrap_content" android:layout_height="wrap_content"
  android:layout_centerHorizontal="true" />

</RelativeLayout>

This link可能对您有所帮助。

答案 3 :(得分:1)

我有类似的情况,我希望按钮始终位于我的列表的右下角,并且列表中会有许多删除/添加。我使用了相对布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/search_bg" >

    <ListView
        android:id="@+id/list_searchfilters"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       android:divider="@android:color/transparent"
        android:dividerHeight="10dp"
        android:listSelector="@drawable/search_list_selector" />

    <Button
        android:id="@+id/add_filter_button"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginTop="20dp"
        android:layout_below="@id/list_searchfilters"
        android:layout_alignParentRight="true"
        android:layout_marginRight="15dp" />
</RelativeLayout>

每次删除或添加一行时,我只会调用我定义为LayoutUtils.setListViewHeightBasedOnChildren(mSearchListView);的行:

public static void setListViewHeightBasedOnChildren(ListView listView) {
            ListAdapter listAdapter = listView.getAdapter(); 
            if (listAdapter == null) {
                // pre-condition
                return;
            }

            int totalHeight = 0;
            for (int i = 0; i < listAdapter.getCount(); i++) {
                View listItem = listAdapter.getView(i, null, listView);
                listItem.measure(0, 0);
                totalHeight += listItem.getMeasuredHeight();
            }

            ViewGroup.LayoutParams params = listView.getLayoutParams();
            params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
            listView.setLayoutParams(params);
            listView.requestLayout();
        }