Material Design-UI之Toolbar+DrawerLayout

一、關於側滑菜單

以前做過的側滑菜單就是通過第三方,slidingmenu可以是實現類似於QQ的側滑效果,但是還是有些bug沒修復好,Material Design提供的toolbar與drawerlayout相結合便有了動畫效果比較好的菜單按鈕動畫,加上Material Design提供的圖片,使得界面有了很大的提升,我們來看看如何實現這樣的效果

二、toolbar的簡單使用

使用include讓佈局看起來簡潔

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!--Toolbar-->
    <include layout="@layout/custom_toolbar" />
    <!--DrawerLayout-->
    <include layout="@layout/custom_drawerlayout" />

</LinearLayout>

toolbar的佈局設置

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tl_custom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ToolbarPopupTheme">

</android.support.v7.widget.Toolbar>

toolbar的主題設置popupTheme,避免點擊菜單時彈出的pop window遮擋住菜單而自己定義樣式

<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark">
    <!--<item name="android:colorBackground">#000000</item> 也可以設置背景色以及menu中的其他屬性-->
    <item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item>
</style>
<style name="OverflowMenuStyle" parent="Widget.AppCompat.Light.PopupMenu.Overflow">
    <item name="overlapAnchor">false</item>  <!--設置不覆蓋錨點-->
</style>

drawerLayout的佈局設置

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dl_left"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--主佈局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include layout="@layout/activity_threelist"/>

    </LinearLayout>
    <!--側滑菜單-->
    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:background="@color/color_drawder"
        android:layout_gravity="start"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:gravity="center_vertical">

這裏的側滑菜單中設置了一個屬性gravity爲start,表示這裏設置爲抽屜可以側滑,下面的就沒有貼出來,因爲是自己填充的佈局,沒有必要了。主頁的佈局即是include中的佈局。下面來看看代碼中的設置:

private void initToolData() {
    toolbar.setTitle("點檢");//設置標題
    toolbar.setTitleTextColor(Color.parseColor("#ffffff"));//設置標題顏色
    setSupportActionBar(toolbar);
    getSupportActionBar().setHomeButtonEnabled(true);//設置返回鍵可用
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setOnMenuItemClickListener(menuClickListener);
    //創建返回鍵,並實現打開關/閉監聽
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name) {
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);

        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);

        }
    };
    mDrawerToggle.syncState();
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

最後antionBarDrawerToggle必須寫,用於綁定toolbar和抽屜佈局,這樣就大致實現了側滑菜單的效果和toolbar的菜單動畫。最後忘了附上menu的菜單佈局

/**
 * 這裏將toolbar裏面的菜單鍵顯示出來
 * @param menu
 * @return
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.toolbar_menu,menu);
    return super.onCreateOptionsMenu(menu);
}

設置如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:icon="@mipmap/ic_readcard"
        android:title="@string/menu_search"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_notification"
        android:icon="@mipmap/ic_input"
        android:title="@string/menu_notifications"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_item1"
        android:title="關於"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_item2"
        android:title="設置"
        app:showAsAction="never" />

</menu>


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