天天看點

android元件之DrawerLayout(抽屜導航)-- 側滑菜單效果

    導航抽屜顯示在螢幕的最左側,預設情況下是隐藏的,當使用者用手指從邊緣向另一個滑動的時候,會出現一個隐藏的面闆,當點選面闆外部或者向原來的方向滑動的時候,抽屜導航就會消失了!

好了,這個抽屜就是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,如需轉載請自行聯系原作者

繼續閱讀