關於ToolBar+DrawerLayout的小結

 

 

將平時的一些困惑記錄下來,共勉。android

------------------------------------------------------------架構

應用場景:ToolBar(用ToolBar代替ActionBar)+DrawerLayout
values---styles---->   <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

其中架構採用的是(一個)Activity+(多個)Fragment形式,每一個Fragment顯示的標題不同,因而將ToolBar定義在每一個Fragment佈局視圖中。因爲多個Fragment都有ToolBar,能夠將其抽離出來,只在每一個Fragment中加入如下代碼,同時單獨在佈局視圖文件夾下建一個「title.xml」,這樣便於管理,***fragment代碼以下:
<!--引入自定義標題佈局-->
    <include layout="@layout/title" />

title.xml,代碼以下:app

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        >
        <!--ToolBar標題的文字,居中顯示-->
        <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:maxLines="1"
            android:textColor="@android:color/white"
            android:textSize="20sp" />
    </android.support.v7.widget.Toolbar>
</LinearLayout>

在每一個fragment中實現標題欄以及顯示標題名稱,以一個fragment爲例,方法以下:ide

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_map, container, false);
    }

    @Override
    public void onViewCreated( View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);     
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    
TextView textView = (TextView) view.findViewById(R.id.toolbar_title);
    toolbar.setTitle(" ");
    textView.setText(R.string.fragment_plot);//顯示toolbar的標題

若是toolbar上須要增長按鈕以實現某些功能,則能夠在在菜單文件夾(menu文件夾)裏建立menu_fragment_trail.xml文件(文件名能夠任意命名)進行菜單項設置,例如:佈局

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/MMPK_Map"
            android:title="@string/mmpk"
            app:showAsAction="never" />
        <item
            android:id="@+id/TILE_Map"
            android:title="@string/tilelayer"
            app:showAsAction="never" />
        <item
            android:id="@+id/SATE_Map"
            android:title="@string/satemap"
            app:showAsAction="never" />
    </group>
</menu>

同時在fragment中進行調用,代碼以下:this

     toolbar.inflateMenu(R.menu.menu_fragment_trail);//設置右上角的填充菜單
         toolbar.getMenu().getItem(0).setChecked(true);  //默認選中切片地圖
     toolbar.setOnMenuItemClickListener(this);//監聽菜單項點擊事件 
//圖層切換選擇
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.MMPK_Map:
                //create a map with MMPK
                loadMobileMapPackage(mmpkFilePath);
                toolbar.getMenu().getItem(0).setChecked(true);
                break;
            case R.id.TILE_Map:
                // create a map with Streets Basemap
                loadArcgisOnlineMap(tilemappath);//加載切片底圖
                toolbar.getMenu().getItem(1).setChecked(true);
                break;
            case R.id.SATE_Map:
                // create a map with Satelite Basemap
                loadArcgisOnlineMap(satemappath);//加載影像圖
                toolbar.getMenu().getItem(2).setChecked(true);
                break;
            case R.id.home:
                mDrawerLayout.openDrawer(GravityCompat.START);//打開DrawerLayout
            default:
        }
        return true;
    }

若是須要在toolbar上調用系統自帶的返回鍵,則使用以下方法進行調用。spa

在toolbar上顯示返回鍵按鈕:code

  ((AppCompatActivity)mActive).setSupportActionBar(toolbar);
   ActionBar actionBar = ((AppCompatActivity) getActivity().getSupportActionBar();//強轉
 if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setHomeButtonEnabled(true);
        }
 //圖層切換選擇
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.MMPK_Map:
                //create a map with MMPK
                loadMobileMapPackage(mmpkFilePath);
                toolbar.getMenu().getItem(0).setChecked(true);
                break;
            case R.id.TILE_Map:
                // create a map with Streets Basemap
                loadArcgisOnlineMap(tilemappath);//加載切片底圖
                toolbar.getMenu().getItem(1).setChecked(true);
                break;
            case R.id.SATE_Map:
                // create a map with Satelite Basemap
                loadArcgisOnlineMap(satemappath);//加載影像圖
                toolbar.getMenu().getItem(2).setChecked(true);
                break;
            case R.id.home: mDrawerLayout.openDrawer(GravityCompat.START);//打開DrawerLayout
            default:
        }
        return true;
    }

  此外若是想達到點擊返回鍵既能彈出DrawerLayout窗口的應用效果,還須要在onCreate()方法中加入setHasOptionsMenu(true)方法,代碼以下:xml

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);//這樣才能打開home鍵
    }
相關文章
相關標籤/搜索