導航抽屜顯示在螢幕的最左側,預設情況下是隐藏的,當使用者用手指從邊緣向另一個滑動的時候,會出現一個隐藏的面闆,當點選面闆外部或者向原來的方向滑動的時候,抽屜導航就會消失了!
好了,這個抽屜就是DrawerLayout,該類位于V4包中。
抽屜導航的實作步驟非常簡單。隻要配置好帶有抽屜導航的布局就可以實作簡單的策劃菜單。布局代碼如下:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/id_drawerlayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/id_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/id_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1111" />
</FrameLayout>
<LinearLayout
android:id="@+id/id_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#E0EEE0"
android:orientation="vertical" >
<ListView
android:id="@+id/id_lv"
android:divider="#CD853F"
android:dividerHeight="2dp" >
</ListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
說明:
1. 必須把DrawerLayout作為布局的跟标簽。
2. 然後在跟标簽中添加一個包含内容的視圖,就是當抽屜完全隐藏的時候顯示的内容布局。
3. 添加一個抽屜布局,這個布局可以按照需求自己定義,我的demo中是一個listview。
4. 抽屜布局中,需要指定android:layout_gravity屬性,官方說明是用start代替left。不過我試了一下start和left,right和end的效果是一樣的。知道是什麼差別?(誰知道,請留言告知一下!謝謝!)
5. 抽屜布局的寬度最好不要超過320dp,這樣做為了當抽屜完全顯示的時候,不至于把内容布局全部遮擋。
好了,此時在你的activity中設定一下布局檔案,就可以實作一個簡單的側滑菜單了,不過菜單是在上面的。
接下來,就要初始化listview了。
mLv = (ListView) findViewById(R.id.id_lv);
str = new String[] { "item1", "item2", "item3"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, str);
mLv.setAdapter(adapter);
mLv.setOnItemClickListener(this);
下面,設定抽屜導航的監聽事件。添加監聽器的時候有三種方式。
1. 設定DrawerLayout.DrawerListener作為監聽器類,裡面包含四個回調函數。
代碼如下:
mDrawerLayout.setDrawerListener(new DrawerListener() {
/**
* 當抽屜滑動狀态改變的時候被調用
* 狀态值是STATE_IDLE(閑置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。
* 抽屜打開的時候,點選抽屜,drawer的狀态就會變成STATE_DRAGGING,然後變成STATE_IDLE
*/
@Override
public void onDrawerStateChanged(int arg0) {
Log.i("drawer", "drawer的狀态:" + arg0);
}
* 當抽屜被滑動的時候調用此方法
* arg1 表示 滑動的幅度(0-1)
*/
public void onDrawerSlide(View arg0, float arg1) {
Log.i("drawer", arg1 + "");
* 當一個抽屜被完全打開的時候被調用
public void onDrawerOpened(View arg0) {
Log.i("drawer", "抽屜被完全打開了!");
* 當一個抽屜完全關閉的時候調用此方法
public void onDrawerClosed(View arg0) {
Log.i("drawer", "抽屜被完全關閉了!");
});
2. 設定DrawerListener的子類SimpleDrawerListener,使用這個類的時候不必實作全部的回調函數,可以根據自己的需要重寫相應的方法。
mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
});
3. 使用DrawerListener的子類ActionBarDrawerToggle。一般與ActionBar結合使用。
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
調用closeDrawer()和openDrawer()可以關閉和打開抽屜。其他的方法就參考API吧!
抽屜導航就介紹到此,總的來說drawer使用起來非常的簡單。不過有一點不好的是,它是把抽屜顯示在内容的上面,而不是下面。我覺得大多數的側滑菜單一般都是在下面的。我在api中也沒有找到關于設定抽屜上下關系的函數。
本文轉自 一點點征服 部落格園部落格,原文連結:http://www.cnblogs.com/ldq2016/p/5369087.html,如需轉載請自行聯系原作者