將平時的一些困惑記錄下來,共勉。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鍵 }