Material Design之Toolbar
2015-12-02 11:20
309 查看
toolbar是安卓5.0+新控件,取代之前的actionbar,比actionbar更自由灵活
要使用toolbar,首先隐藏自带的标题栏,然后再布局中声明上面的toolbar(不一定放在头部,可以是任何位置,在布局中灵活使用)
使用隐藏标题栏的风格
Theme.AppCompat风格对应的颜色属性的意义,其中bar对应的颜色属性有colorPrimary和textcolorPrimary,如果我们使用actionbar,直接在上面的style文件中配置就可以了
如果使用toolbar,还需要在toolbar里设定一下(见下面toolbar.xml布局中对backgroud的设定),当然,如果不设定,会有默认值:
toolbar.xml布局
?attr表示使用当前样式中定义的对应属性的值,比如此处,样式为noactionbar,它里面有个自定义属性actionbarsize,它的值默认是56dp
我们让toolbar的最小高度沿用这个值,以保持风格的统一
需要toolbar的时候include这个布局
代码中设定这个toolbar
boolbar上设置菜单,重写onCreateOptionsMenu即可:
ShareActionProvider是4.0后,安卓系统提供的分享功能的实现,要使用它,先要声明这个菜单项的actionProviderClass为ShareActionProvider
菜单的定义:
菜单点击事件响应:
要使用toolbar,首先隐藏自带的标题栏,然后再布局中声明上面的toolbar(不一定放在头部,可以是任何位置,在布局中灵活使用)
使用隐藏标题栏的风格
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <!-- Customize your theme here. --> <!-- toolbar(actionbar)颜色 --> <item name="colorPrimary">#4876FF</item> <!-- 状态栏颜色 --> <item name="colorPrimaryDark">#3A5FCD</item> <!-- 窗口的背景颜色 --> <item name="android:windowBackground">@android:color/white</item> <!-- SearchView --> <item name="searchViewStyle">@style/MySearchViewStyle</item> </style>
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> </style>
Theme.AppCompat风格对应的颜色属性的意义,其中bar对应的颜色属性有colorPrimary和textcolorPrimary,如果我们使用actionbar,直接在上面的style文件中配置就可以了
如果使用toolbar,还需要在toolbar里设定一下(见下面toolbar.xml布局中对backgroud的设定),当然,如果不设定,会有默认值:
toolbar.xml布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" > </android.support.v7.widget.Toolbar>
?attr表示使用当前样式中定义的对应属性的值,比如此处,样式为noactionbar,它里面有个自定义属性actionbarsize,它的值默认是56dp
<item name="actionBarSize">@dimen/abc_action_bar_default_height_material</item>
<dimen name="abc_action_bar_default_height_material">56dp</dimen>
我们让toolbar的最小高度沿用这个值,以保持风格的统一
需要toolbar的时候include这个布局
<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="com.qianfeng.zhouyi.toolbartest.MainActivity"> <include layout="@layout/toolbar" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:layout_below="@+id/toolbar"/> </RelativeLayout>
代码中设定这个toolbar
mToolbar = (Toolbar) this.findViewById(R.id.toolbar); // toolbar.setLogo(R.drawable.ic_launcher); mToolbar.setTitle("Rocko");// 标题的文字需在setSupportActionBar之前,不然会无效 // toolbar.setSubtitle("副标题"); setSupportActionBar(mToolbar);
boolbar上设置菜单,重写onCreateOptionsMenu即可:
ShareActionProvider是4.0后,安卓系统提供的分享功能的实现,要使用它,先要声明这个菜单项的actionProviderClass为ShareActionProvider
android:actionProviderClass=
"android.widget.ShareActionProvider"
然后设置Intent,目的是声明要分享的数据类型(比如文本,图片等待)
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); // /* ShareActionProvider配置 */ mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menu .findItem(R.id.action_share)); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/*"); mShareActionProvider.setShareIntent(intent); return super.onCreateOptionsMenu(menu); }
菜单的定义:
orderInCategoryactionbar:里每个item的优先级,值越大优先级越低,优先级高的放在前面,actionbar地方不够,优先级低得就会放到overflow中
actionProviderClass:定义菜单的类型,预设了很多类型,比如搜索菜单,分享菜单等
showAsAction:可以为以下4个值: 1、always:这个值会使菜单项一直显示在Action Bar上。 2、ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。 3、never:这个值使菜单项永远都不出现在Action Bar上,只出现在溢出菜单列表里 4、withText:这个值使菜单项和它的图标,菜单文本一起显示。
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity" > <item android:id="@+id/ab_search" android:orderInCategory="80" android:title="action_search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="ifRoom"/> <item android:id="@+id/action_share" android:orderInCategory="90" android:title="action_share" app:actionProviderClass="android.support.v7.widget.ShareActionProvider" app:showAsAction="ifRoom"/> <item android:id="@+id/action_settings" android:orderInCategory="100" android:title="action_settings" app:showAsAction="never"/> </menu>
菜单点击事件响应:
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: Toast.makeText(MainActivity.this, "action_settings", Toast.LENGTH_SHORT).show(); break; case R.id.action_share: Toast.makeText(MainActivity.this, "action_share", Toast.LENGTH_SHORT).show(); break; default: break; } return true; } });
相关文章推荐
- 表达式的前中后缀表示和表达式运算
- Android程序更换icon后不变的问题
- service ipvsadm start 启动失败
- 获取手机所有图片并显示
- RippleEffect(水波纹效果)的实现
- 实现文件上传,以及表单提交成功的回调函数
- 六款值得推荐的android(安卓)开源框架(包含下载链接)
- 使用spring动态路由切换主从库
- 兼容实时监测文本框内容的输入
- 使用servlet 3.0 新特性 @WebServlet(urlPatterns = "/brainT") 访问 url,服务器报404错误
- linux ps 命令详解
- spring transaction源码分析--事务架构
- mondodb初识
- 解决Inno Setup制作安装包无法创建桌面快捷方式的问题
- LintCode: Word Break
- 重读《Kotlin For Android》二
- 重要开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- jQuery Validation Engine 表单验证
- 开始iOS 7中自动布局教程(一)
- 引入别人的Android Studio项目遇到的bug以及解决方法