說明
DrawerLayout是Support Library包中實現了側滑菜單效果的控件,可以說drawerLayout是因爲第三方控件如MenuDrawer等的出現之後,google借鑑而出現的產物。drawerLayout分爲側邊菜單和主內容區兩部分,側邊菜單可以根據手勢展開與隱藏(drawerLayout自身特性),主內容區的內容可以隨着菜單的點擊而變化(這需要使用者自己實現)。
drawerLayout的使用很方便,使用drawerLayout的要點如下:
1. drawerLayout其實是一個佈局控件,跟LinearLayout等控件是一種東西,但是drawerLayout帶有滑動的功能。只要按照drawerLayout的規定佈局方式寫完佈局,就能有側滑的效果。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
其中:DrawerLayout最好爲界面的根佈局,官網是這樣說的,否則可能會出現觸摸事件被屏蔽的問題;主內容區的佈局代碼要放在側滑菜單佈局的前面, 因爲 XML 順序意味着按 z 序(層疊順序)排序,並且抽屜式導航欄必須位於內容頂部;側滑菜單部分的佈局(這裏是ListView)必須設置layout_gravity屬性,他表示側滑菜單是在左邊還是右邊,而且如果不設置在打開關閉抽屜的時候會報錯,設置了layout_gravity=”start/left”的視圖纔會被認爲是側滑菜單。
- drawerLayout左側菜單(或者右側)的展開與隱藏可以被DrawerLayout.DrawerListener的實現監聽到,這樣你就可以在菜單展開與隱藏反生的時刻做一些希望做的事情,比如更新actionbar菜單等。如果你的activity有actionbar的話,還是建議你用ActionBarDrawerToggle來監聽,ActionBarDrawerToggle實現了DrawerListener,所以他能做DrawerListener可以做的任何事情,同時他還能將drawerLayout的展開和隱藏與actionbar的app 圖標關聯起來,當展開與隱藏的時候圖標有一定的平移效果,點擊圖標的時候還能展開或者隱藏菜單。
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
R.string.drawer_open, /* "open drawer" description for accessibility */
R.string.drawer_close /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle)
博客參考
http://blog.csdn.net/lmj623565791/article/details/39185641