Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ListActivity - fixed header and footer

Is it possible to set header and footer at ListActivity to be fixed at the top and the bottom, so only the content (list) is scrolling, not also header and footer?

I have both set like this:

View header = getLayoutInflater().inflate(R.layout.list_header, null);
View footer = getLayoutInflater().inflate(R.layout.list_footer, null);
ListView listView = getListView();
listView.addHeaderView(header);
listView.addFooterView(footer);
like image 845
Trick Avatar asked Nov 15 '12 16:11

Trick


2 Answers

You can achieve it by using a custom XML layout in which you will set the layout of your header, footer and list.

Note that to be compatible with ListActivity this layout must contain a ListView with the id android.R.id.list:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HEADER" />

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="FOOTER" />

</LinearLayout>

And set it in your ListActivity like this:

public class TestActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
like image 56
sdabet Avatar answered Oct 23 '22 17:10

sdabet


According to project scenario, this methodology would be better than any other approach, because if you want to customize the header and footer, you can make changes in appropriate header and footer layout. In your layout xml file follow this :

In main.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" >

   <include
        android:id="@+id/header_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/header.xml" />

   <ListView
        android:id="@+id/list_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:below="@id/header_layout"
        android:above="@id/footer_layout" />

    <include
        android:id="@+id/footer_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/footer.xml" />
 </RelativeLayout>

In header.xml

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

    <TextView
           android:id="@+id/header_text_view"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" 
           android:text="Your Application Title"/>
   </LinearLayout>

In footer.xml

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

     <Button
           android:id="@+id/done_button"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" 
           android:text="Done"/>
   </LinearLayout>

In Activity, Here

  public class MainActivity extends ListActivity {

   private ListView mListView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mListView = (ListView) findViewById(R.id.list_view);
        // Now you can do whatever you want

   }
 }
like image 44
RajeshVijayakumar Avatar answered Oct 23 '22 18:10

RajeshVijayakumar