Android側滑菜單DrawerLayout

說明

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”的視圖纔會被認爲是側滑菜單。

  1. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章