关于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键
    }
时间: 2024-12-22 20:20:48

关于ToolBar+DrawerLayout的小结的相关文章

android 5.X Toolbar+DrawerLayout实现抽屉菜单

前言 ?android5.X新增的一个控件Toolbar,这个控件比ActionBar更加自由,可控,因为曾经的ActionBar的灵活性比較差,所以google逐渐使用Toolbar替代ActionBar,所以Toolbar也能够说是超级ActionBar. 这篇文章不具体介绍ToolBar的使用(定制),主要是介绍Toolbar使用的一个样例.即Toolbar结合DrawerLayout实现抽屉菜单. 使用这个两个控件须要引入对应的库依赖: dependencies { compile fi

模仿知乎Android APP,使用ToolBar+DrawerLayout+ViewPager

首先,需要使用ToolBar就需要有android.support.v7包,关于他的一些问题,大家可以看我之前的blog:关于V7的的一些问题和解决方法. 主要是需要下载到V7包,然后添加到他的class  path去,这样才可以支持ToolBar的一些style,然后还需要V7的JAR包,大家把他放在lib目录底下,build path就可以了. demo的大概框架: . 开始之前,我们了解一些关于ToolBar的一些知识,他是相当于ActionBar的第二代,在新的谷歌设计规范中提倡大家使用

Toolbar+DrawerLayout高仿网易新闻客户端

首先看效果图,网易新闻客户端的特点是双向侧滑,并且左上角的图标会随着菜单的侧滑会有动画效果. 我们采用Toolbar和DrawerLayout实现双向侧滑以及actionbar 在菜单文件里先定义菜单 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools=&q

Material Design控件使用学习 toolbar+drawerlayout+ Snackbar

效果 1.,导包design包和appcompat-v7 ,设置Theme主题Style为NoActionbar 2.custom_toolbar.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns

Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)

通过前几篇文章,我们对Android的导航栏有了一定的了解认识,本次文章将对Toolbar进行综合应用,主要结合DrawerLayout.ViewPager.PagerSlidingTabStrip一起使用. PagerSlidingTabStrip是github上一个开源库,地址为:https://github.com/astuetz/PagerSlidingTabStrip DrawerLayout之前有过介绍,在此不在过多介绍. 先看布局文件: <RelativeLayout xmlns:

安卓Design包之NavigationView结合DrawerLayout,toolbar的使用,FloatingActionButton

FloatingActionButton 悬浮按钮:FloatingActionButton是重写ImageView的,所有FloatingActionButton拥有ImageView的一切属性. app:backgroundTint - 设置FAB的背景颜色. app:rippleColor - 设置FAB点击时的背景颜色. app:borderWidth - 该属性尤为重要,如果不设置0dp,那么在4.1的sdk上FAB会显示为正方形,而且在5.0以后的sdk没有阴影效果.所以设置为bor

使用 DrawerLayout 实现 Material Design风格的侧滑

先看效果吧! 效果一: Android 2.3 效果 Android 5.0 效果 效果二: Android 2.3 效果 Android 5.0 效果 分析: 1.0 效果一和效果二的区别 drawerLayout 跟 ActionBar 的位置区别,效果一会覆盖 ActionBar,效果二显示在ActionBar 下方. Android 2.3 和5.0的区别是5.0的状态栏和 app 连在一块了.更统一了. 下面是2种方式的实现(本工程是以 android studio 实现):1.0 首

Adapter类控件使用之DrawerLayout(官方侧滑菜单)的简单使用

(一)概述 本节给大家带来基础UI控件部分的最后一个控件:DrawerLayout,官方给我们提供的一个侧滑菜单控件,和上一节的ViewPager一样,3.0以后引入,低版本使用它,需要v4兼容包,既然Google为我们提供了这个控件,为何不用咧,而且在 Material Design设计规范中,随处可见的很多侧滑菜单的动画效果,大都可以通过Toolbar + DrawerLayout来实现~,本节我们就来探究下这个DrawerLayout的一个基本用法~还有人喜欢把他 称为抽屉控件~ (二)使

Androd Toolbar 的简单使用(转)

14年Android开发者大会提出了Android5.0 系统以及 材料设置 Material Design.在 材料设计中推出了大量的UI效果,其中某些功能 已添加进 兼容包,所以可以在低版本中来实现一些材料设计效果.今天主要介绍的就是 ActionBar的替代品 Toolbar.Toolbar 是在V7包兼容的,所以需要下载最新的V7包. 使用ToolBar主要从以下3个步骤开始: 样式定义显示效果,属性 在布局中使用ToolBar 在代码中设置属性  1.  首先,来看下如何设置样式.由于