前言

最近这几天被Android主题与Toolbar样式搞晕了,因为本来自己的Android根基就浅,对这方面又一直没有深入了解过;后来在Google上搜索到一篇文章:Android: Changing the Toolbar’s text color and overflow icon color,该文章对这方面有一定描述,帮助我理解了一些内容。

然后我试着将这篇文章翻译了一下,想着不明白的时候再回来查阅,译文:Android:改变 Toolbar 的文字和溢出图标颜色。

今天又测试一下相关内容,这里写点东西记一下。

目的

我的最终目的是在Light主题上得到深色Toolbar背景色和白色菜单按钮,包括溢出菜单背景色和Menu项字体颜色都一致,如下图所示:

下面描述一下如何得到这么一个效果。


最初的样子

新创建项目时在style.xml中定义一下AppTheme并在AndroidManifest.xml文件中指定为App的主题(android:theme=”@style/AppTheme”),Style定义如下所示:

其它测试代码省略。这时我们运行一下,可以看到界面如下所示:


感觉黑色的标题和菜单真的好丑,因为浅色主题期 App Bar (Toolbar 或者 ActionBar)拥有浅色背景,因此给你用上了黑色的标题和溢出菜单图标,包括菜单字体的颜色。

定义溢出菜单样式

我们看到上面的效果图中溢出菜单是覆盖在Toolbar之上的,我希望它能像微信中的一样出现在Toolbar下面,可以通过自定义样式来做到这些。

在style.xml中定义OverflowMenuStyle样式如下所示:

这时有两种方式应用这个样式:

这时我们运行App,效果如下所示:


溢出菜单的弹出层已经位于Toolbar的下方了,而且背景色也改为我们期望的colorPrimary颜色。

接下来我们尝试改变一下标题和溢出菜单项的文字颜色。

Dark主题

这时改变标题和溢出图标为白色的最简单方法就是使用Dark主题作为我们的App主题,因为Dark主题会默认使用白色的标题和溢出菜单图标,那么我们试一下。

修改AppTheme的父主题为“Theme.AppCompat.NoActionBar”,该部分代码如下所示:

运行效果如下所示:


这时已经很接近我的目标了,但由于用的是Dark主题,因此TextView的背景色是黑色的,我不希望我的大部分UI控件都是深色系统的,因此这种方式我不想采用。

我把AppTheme的parent改回“Theme.AppCompat.Light.NoActionBar”主题,这时再看一遍当前的运行效果:


这是浅色主题下的表现,接下来尝试改变这些黑色字体。

改变Toolbar主题

Android 5.0引入一个全新的特性,允许你对view设置theme,这种设置会影响控件及其包含的子控件。

使用AppCompat v22.1.x 后,也可以给你 layout 里的任意视图设置主题。

只要使用 android:theme 这个属性就好,新版本的兼容库可以在 compat 和 framework 之间无缝地切换功能。

从上面的描述中可以得知,我们可以单独为Toolbar设置主题,主题中的样式将影响Toolbar本身及其子View;因此我们考虑是否可以为Toolbar设置一个深色主题,这样系统会将标题和溢出图标等元素颜色设置为白色。

尝试将Toolbar主题设置为“ThemeOverlay.AppCompat.Dark.ActionBar”如下所示:

运行App可以看到确实有效果,这样我们就可以得到开关描述的效果了(浅色主题下Toolbar使用深色背景,并且将标题、溢出图标及溢出菜单文字改为白色)。

再看一遍最终效果图吧!


更多相关文章

  1. Android之菜单总结
  2. Android学习篇之Menu的使用
  3. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  4. SlidingMenu和ActionBarSherlock结合做出出色的App布局,Facebook
  5. [android]在上下文菜单的选中事件中获取列表选中的元素
  6. android api 中文 (74)—— AdapterView.AdapterContextMenuInfo
  7. Android(安卓)之 下拉框(Spinner)的简单使用
  8. android2.2资源文件详解4--menu文件夹下的菜单定义
  9. Android中onContextItemSelected不响应

随机推荐

  1. android intent相关
  2. 开关飞行模式
  3. android 启动自动调用自己创建的脚本(应用
  4. Android——高德地图地点搜索框
  5. Android(安卓)拷贝Asset目录下文件或者文
  6. ColorStateList按钮文字变色
  7. android 加载时闪烁点样式的启动画面
  8. AcitonBar自定义布局
  9. Android入门:布局介绍
  10. Android(安卓)调用另一个应用(app)中的Acti