Android Toolbar+DrawerLayout使用细节

2024-08-30 04:48

本文主要是介绍Android Toolbar+DrawerLayout使用细节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.Toolbar

Toolbar 是Android 5.0后对针对Actionbar的不足进行改进所提出来的,当然大家也可以继续使用自定义的Title但是有些效果还是直接使用现成的轮子比较好,而且对于AndroidUI统一也是有好处的。

1.1Toolbar的使用

Toolbar只需要引用v7包的基础上在布局界面使用<Toolbar/>类似于控件一样使用就可以了。

涉及到样式问题,这里有两种显示方式要注意:

1. 如果要替换ActionBar,需要将主题设置为没有ActionBar的主题,然后调用setSupportActionBar(toolbar)(需要继承ActionBarActivity)就可以了。
2. 你也可以不使用上面的方法,而是直接使用Toolbar
直接在onCreate方法中添加以下代码即可,并且这种方法也可实现ActionBarToolbar共存。

这里建议使用第一种,以下以第一种方式讲解:

compileSdkVersion 22(为了让item显示图片,好像只能22,22以上就显示不出来了..)

compile 'com.android.support:appcompat-v7:22.0.0'

首先是布局界面:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:fitsSystemWindows="true"android:background="@color/colorPrimaryDark"android:minHeight="?attr/actionBarSize"/>

编写菜单布局:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/action_search"android:icon="@mipmap/ic_launcher"android:title="搜索"app:showAsAction="ifRoom" /><itemandroid:id="@+id/action_notification"android:icon="@mipmap/ic_launcher"android:title="通知"app:showAsAction="ifRoom" /><itemandroid:id="@+id/action_settings"android:orderInCategory="100"android:icon="@mipmap/ic_launcher"android:title="设置"app:showAsAction="withText" /><itemandroid:id="@+id/action_about"android:orderInCategory="101"android:icon="@mipmap/ic_launcher"android:title="关于"app:showAsAction="withText" />
</menu>

注意事项:

orderInCategory 标识排放的顺序;

app:showAsAction 用来标识menu的显示方式,主要有三个选择:

1.always,总是显示在界面上

2.never ,不出现在界面上,只出现在右边三个点之中

3.ifroom ,如果界面放不下就自动放到右边三个点中


接着在Activity中设置应用:

toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("");
toolbar.setLogo(R.mipmap.base_common_default_icon_big);
setSupportActionBar(toolbar);
//menu选项监听函数,包括三点中和外面的
<pre name="code" class="java"> @Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_zone) {Toast.makeText(MainActivity.this, "hahah", Toast.LENGTH_SHORT).show();}return super.onOptionsItemSelected(item);}<pre name="code" class="java">   /****收到overflow中的item显示图片**/@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {if (menu.getClass().getSimpleName().equals("MenuBuilder")) {try {Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);m.setAccessible(true);m.invoke(menu, true);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (Exception e) {throw new RuntimeException(e);}}}return super.onMenuOpened(featureId, menu);}


 
 

注意点:

默认的收到overflow中的选项是只能显示文字的,为了显示图片需要重写这个函数onMenuOpened()。


1.2 Theme相关

<resources><style name="AppTheme" parent="@style/AppBaseTheme"></style><style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- 状态栏和标题栏颜色--><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><!-- 标题颜色--><item name="android:textColorPrimary">@android:color/white</item><!-- 侧滑箭头 --><item name="drawerArrowStyle">@style/DrawerArrowStyle</item><!-- 溢出菜单图标(三个点)颜色--><item name="colorControlNormal">@android:color/white</item><!--溢出菜单样式--><item name="actionOverflowMenuStyle">@style/OverflowMenuStyle</item>--><!-- 溢出菜单文字颜色--><item name="textAppearanceLargePopupMenu">@style/OverflowMenuTextAppearance</item></style><!--溢出菜单样式(背景,大小等) --><style name="OverflowMenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu.Overflow"><item name="overlapAnchor">false</item><!--弹窗是否叠加在三个点之上 --><item name="android:dropDownWidth">wrap_content</item><!--弹窗宽度 --><item name="android:paddingRight">5dp</item><item name="android:popupBackground">@android:color/darker_gray</item><!--弹窗背景色 --><item name="android:dropDownVerticalOffset">2dip</item><item name="android:dropDownHorizontalOffset">0dip</item></style><!--溢出菜单文字样式(大小,颜色)--><style name="OverflowMenuTextAppearance" parent="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large"><item name="android:textColor">@color/overflowTextColor</item><item name="android:textSize">15sp</item></style><!-- 左边的侧滑箭头指示   是否翻转,颜色--><style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"><item name="spinBars">true</item><item name="color">@android:color/white</item></style>
</resources>


2.侧滑DrawerLayout

界面:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><includeandroid:id="@+id/toolbar"layout="@layout/toolbar" /><android.support.v4.widget.DrawerLayoutandroid:layout_below="@id/toolbar"android:id="@+id/drawerlayout"android:layout_width="match_parent"android:layout_height="match_parent"><!--主布局--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#fff"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="主界面内容"/></LinearLayout><!--左边侧滑菜单--><LinearLayoutandroid:layout_width="200dp"android:layout_height="match_parent"android:background="#009688"android:layout_gravity="start"><!--左边侧滑菜单内容--><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="左边,,,"/></LinearLayout><!--右边侧滑菜单--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#009688"android:layout_gravity="end"><!--右边侧滑菜单内容--><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="右边。。。"/></LinearLayout></android.support.v4.widget.DrawerLayout>
</RelativeLayout>

activity中绑定;

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.open, R.string.close) {@Overridepublic void onDrawerOpened(View drawerView) {super.onDrawerOpened(drawerView);}@Overridepublic void onDrawerClosed(View drawerView) {super.onDrawerClosed(drawerView);}};mDrawerToggle.syncState();mDrawerLayout.setDrawerListener(mDrawerToggle);


theme:见上面详细

 <!-- 侧滑箭头 --><item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
<!-- 左边的侧滑箭头指示   是否翻转,颜色--><style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"><item name="spinBars">true</item><item name="color">@android:color/white</item></style>









这篇关于Android Toolbar+DrawerLayout使用细节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119837

相关文章

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J