zoukankan      html  css  js  c++  java
  • 关于ToolBar+DrawerLayout的小结

    将平时的一些困惑记录下来,共勉。

    ------------------------------------------------------------

    应用场景: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,代码如下:

    <?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为例,方法如下:

     @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中进行调用,代码如下:

         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上调用系统自带的返回键,则使用如下方法进行调用。

    在toolbar上显示返回键按钮:

      ((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)方法,代码如下:

     @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);//这样才能打开home键
        }
  • 相关阅读:
    辛星和你彻底搞清CSS中的相对定位和绝对定位
    快速向表中插入大量数据Oracle中append与Nologging
    关于insert /*+ append*/ 各种insert插入速度比较
    dblink连接的目标端 session不断的问题。
    oracle操作记录
    ORACLE快速彻底Kill掉的会话
    Oracle 死锁的检测查询及处理
    Oracle 11g必须开启的服务及服务详细介绍
    oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
    Oracle报 ORA-00054资源正忙的解决办法
  • 原文地址:https://www.cnblogs.com/gis-laozhang/p/6652547.html
Copyright © 2011-2022 走看看