Trying to add a footer to a navigation drawer that consists of two lists. I am not doing this right, I understood that anything that i want in the navigation drawer should be encapsulated in the
<LinearLayout
android:id="@+id/left_drawer_layout"
I would like to add a bottom layout that does not depend on ListView scroll. I tried different versions of where to add the bottom layout code but nothing happens. I need an extra eye, please. Thank you.
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar”/>
<!-- Framelayout to display Fragments -->
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
<!-- Listview to display slider menu -->
<LinearLayout
android:id="@+id/left_drawer_layout"
android:layout_width="@dimen/navigation_drawer_max_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/list_background">
<Button
android:id="@+id/refreshBtn"
android:layout_width="match_parent"
android:layout_height="48dp"
android:text="@string/refresh"
android:visibility="gone" />
<EditText
android:id="@+id/searchMenuTxt"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@color/list_background_pressed"
android:drawableLeft="@drawable/search_web"
android:drawablePadding="@dimen/activity_horizontal_margin"
android:drawableStart="@drawable/search_web"
android:focusable="false"
android:focusableInTouchMode="true"
android:hint="@string/search"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColorHint="@android:color/darker_gray"
android:textSize="@dimen/text_size_14"></EditText>
<Button
android:id="@+id/clearBtn"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="right|center"
android:background="@drawable/mob_clear"
android:paddingRight="8dp"
android:visibility="invisible" />
</FrameLayout>
<LinearLayout
android:id="@+id/left_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/activeChatsList"
android:layout_width="@dimen/navigation_drawer_max_width"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:background="@color/list_background_pressed"
android:choiceMode="singleChoice"
android:divider="@drawable/list_divider"
android:dividerHeight="1dp"
android:fadeScrollbars="false"
android:fastScrollEnabled="false" />
<ListView
android:id="@+id/drawerListView"
android:layout_width="@dimen/navigation_drawer_max_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@drawable/list_selector"
android:choiceMode="singleChoice"
android:divider="@drawable/list_divider"
android:dividerHeight="1dp"
android:drawSelectorOnTop="true"
android:fastScrollEnabled="false"
android:minHeight="250dp" />
<LinearLayout
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_alignParentBottom="true">
<Button android:id="@+id/CancelButton" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text=“Profile" />
>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
You can have the basic idea from this code snippet. And android now has the built-in functionality for menu drawer. What you are trying to do is old approach. Actionbar sherlock is deprecated. So i would recommend you to move to AppCompat. With Appcompat following is the code for having the layout of menu drawer along with the footer.
drawer_fragment.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.focial"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" >
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:clickable="true"
android:background="@android:color/black"
android:orientation="vertical">
<!-- any addition stuff you want in yoour footer layout -->
</LinearLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/footer"
android:choiceMode="singleChoice"
android:dividerHeight="1dp" />
</RelativeLayout>
activity_home.xml (where you want to enable/show drawer)
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" >
<FrameLayout
android:id="@+id/realcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<fragment
android:id="@+id/navigation_drawer"
android:name="com.focial.fragment.NavigationDrawerFragment"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start" />
HomeActivity.java
private NavigationDrawerFragment mNavigationDrawerFragment;
private ArrayList<DrawerItem> drawerItems;
private DrawerLayout drawerLayout;
protected void initUIComponents() {
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mNavigationDrawerFragment.setUp(R.id.navigation_drawer, drawerLayout, drawerItems);
}
@Override
public void onNavigationDrawerItemSelected(int itemlabelId) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.realcontent, CustomFragmentManager.newInstance(itemlabelId)).commit();
}
NavigationDrawerFragment.java
View rootView = (RelativeLayout) inflater.inflate(R.layout.layout_fragment_drawer, container, false);
ListView mDrawerListView = (ListView) rootView.findViewById(R.id.drawer_list);
LinearLayout footerView = (LinearLayout) rootView.findViewById(R.id.footer);
Your left drawer layout do not necessarily need to be a LinearLayout
, it could be something like:
<RelativeLayout
android:id="@+id/left_drawer_layout"
android:layout_width="@dimen/navigation_drawer_max_width"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/drawer_footer"
android:layout_gravity="start"
android:orientation="vertical">
<!-- YOUR PREVIOUS LAYOUT -->
</LinearLayout>
<LinearLayout
android.id="@+id/drawer_footer"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="100dp">
<!-- YOUR FOOTER WITH layout_alignParentBottom -->
</LinearLayout>
</RelativeLayout>
That way your footer will always be on the bottom of your left drawer.
you can use this drawer on your project or some layout like what used on this project https://github.com/neokree/MaterialNavigationDrawer
project have addBottomSection method for footer layout
you can see example of this project in this apk: https://github.com/neokree/MaterialNavigationDrawer/blob/master/example.apk
Because your drawerListView
's android:layout_height="match_parent"
, so the it's take all height left in scree and push the bottom layout out of screen.
You can try this:
<LinearLayout
android:id="@+id/left_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical" >
<ListView
android:id="@+id/activeChatsList" />
<ListView
android:id="@+id/drawerListView" />
</LinearLayout>
<Button
android:id="@+id/CancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="“Profile" />
</LinearLayout>
Beside of that, I suggest you should use 1 list view with multi viewType in adapter instead of 2 separate list views because if the 1st scrollable then the 2nd will not show up or if the 2nd show up, that mean the 1st doesn't need to scroll so it's meaningless to be a listview.
Hop this helps.
最好的方法是为页脚创建另一个布局,并将该布局添加到列表页脚。
listView.addFooterView(R.layout.<your footer layout>);
This is only suggestion. I am adding this as my answer because I dont have enough reputation to add a comment on others posts, Sorry.I think this is already solved in SO. Please check the below this link How to put list items at the bottom of list view in Navigation Drawer like Foursquare
you can use ActionBarSherlock library. I think It is so helpfull.
You have to use frame layout after the drawer control tag.
Place all controls in the frame layout.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.