程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> ToolBar和DrawerLayout的使用實現側拉欄抽屜的開閉,toolbardrawerlayout

ToolBar和DrawerLayout的使用實現側拉欄抽屜的開閉,toolbardrawerlayout

編輯:JAVA綜合教程

ToolBar和DrawerLayout的使用實現側拉欄抽屜的開閉,toolbardrawerlayout


1.如圖可以看到textColorPrimary,colorPrimary,colorPrimaryDark,navigationBarColor等顏色屬性代表的相應位置,如下圖

 

 

 

2.具體屬性在res的style.xml中更改,如下圖,另外在Android.Manifest的裡面需要將theme改成對應的AppTheme,如圖中所示(注意需要選擇NoActionBar的主題作為父類,因為我們不用到ActionBar,而是用ToolBar替代)

 

 

 

3.接下來需要在主xml文件即activity_main.xml裡面聲明ToolBar,使用v7庫中的toolBar,android.support.v7.widget.ToolBar

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize" />

 並且在mainActivity中需要進行toolBar的綁定

 setSupportActionBar(toolbar);

 

4.ToolBar的裡面菜單項的添加,需要用到menu.xml,即在layout裡面創建menu文件,作為ToolBar控件的xml文件,

 

 

並且需要將menu利用重載函數OnCreateOptionsMenu(Menu menu)函數來將自定義的menu xml文件來綁定

 

 

 

 

圖中的item項對應一個ToolBar中的一個標簽,這裡注意showAsAction需要在app空間下才能調用(故在menu開頭添加了app="http://schemas.android.com/apk/res-auto"),該屬性設置為always則為顯示圖標,never則為不顯示圖標只顯示More,如下圖

中右邊兩個白色圖標分別為前兩個圖標,第三個圖標由於屬性為showAsAction:never,故藏在最右邊的三點菜單中,點擊則彈出

 

 

 

 

如何構建左邊的菜單即DrawerLayout,抽屜效果如下custom_drawerlayout.xml的內容,DrawerLayout必須至少有兩個布局,第一個布局為主布局,就是ToolBar以下的所有位置

第二個布局為隱藏的側邊欄,主要是以ListView為主,此時的gravity="start"相當於left,代表從左邊拉開

<?xml version="1.0" encoding="utf-8"?>
<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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World"/>
</LinearLayout>
<!--抽屜拉開後的布局,即ListView所在的布局-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:layout_gravity="start">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_left_menu"
android:divider="@null">
</ListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
------------------------------------------------------------------------------------------------------------------------------------------
最後需要把custom_drawerlayout作為組件放在activity_main.xml文件中
<include layout="@layout/custom_drawerlayout"/>


為了實現左邊菜單的箭頭的三條槓的轉換,需要調用ActionBarToggle開關,它作為控制左上角的開關來實現抽屜的開合

 

以下四步必不可少(ActionBarDrawerToggle可以監聽抽屜開合事件,可以認為是DrawerListener的子類)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);// 給左上角圖標的左邊加上一個返回的圖標
mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close);
//聲明mDrawerToggle對象,其中R.string.open和R.string.close簡單可以用"open"和"close"替代

mDrawerToggle.syncState();//實現箭頭和三條槓圖案切換和抽屜拉合的同步

mDrawerLayout.setDrawerListener(mDrawerToggle);監聽實現側邊欄的拉開和閉合,即抽屜drawer的閉合和打開

另外兩個函數需要注意(分別是抽屜拉開和閉合的觸發函數):
這兩個函數在這裡沒有用,如果需要在抽屜打開閉合時改變ToolBar的Title,那麼可以通過這兩個函數來改變
mDrawerToggle = new ActionBarDrawerToggle(this, //
                mDrawerLayout,//
                R.drawable.ic_drawer,//
                R.string.drawer_open,//
                R.string.drawer_close) {
            // 被打開的時候
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActionBar().setTitle(請選擇); // 設置actionBar的文字
                invalidateOptionsMenu(); // Call onPrepareOptionsMenu()
            }

            // 被關閉的時候
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu();// 重新繪制actionBar上邊的菜單項
            }
};
----------------------------------------這裡是Cc的悲傷分割線--------------------------------------------------------------------------------------

 下述函數是來捕獲ToolBar中的item點擊事件

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.item_search:
Toast.makeText(this,"Search item has been selected",Toast.LENGTH_SHORT).show();
break;
case R.id.item_share:
Toast.makeText(this,"Share item has been selected",Toast.LENGTH_SHORT).show();
break;
case R.id.item_more:
Toast.makeText(this,"More item has been selected",Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved