技术标签: android toolbar
版权声明:本文为博主原创文章,未经博主允许不得转载。
本项目相关源码地址:http://git.oschina.net/zhyihui/Android_cxBase
最近这几天被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定义如下所示:
可以看到我们的自定义主题继承自“Theme.AppCompat.Light.NoActionBar”,这是向下兼容的浅色无ActionBar材料主题,Light表示浅色主题,NoActionBar表示没有默认的ActionBar;主题定义中有几个颜色定义,它们的具体含义网上很容易可以找到,这里不解释这些东西。
然后定义一个Toolbar,并在应用中包含进一个Activity布局文件中
其它测试代码省略。这时我们运行一下,可以看到界面如下所示:
感觉黑色的标题和菜单真的好丑,因为浅色主题期 App Bar (Toolbar 或者 ActionBar)拥有浅色背景,因此给你用上了黑色的标题和溢出菜单图标,包括菜单字体的颜色。
我们看到上面的效果图中溢出菜单是覆盖在Toolbar之上的,我希望它能像微信中的一样出现在Toolbar下面,可以通过自定义样式来做到这些。
在style.xml中定义OverflowMenuStyle样式如下所示:
这时有两种方式应用这个样式:
这时我们运行App,效果如下所示:
溢出菜单的弹出层已经位于Toolbar的下方了,而且背景色也改为我们期望的colorPrimary颜色。
接下来我们尝试改变一下标题和溢出菜单项的文字颜色。
这时改变标题和溢出图标为白色的最简单方法就是使用Dark主题作为我们的App主题,因为Dark主题会默认使用白色的标题和溢出菜单图标,那么我们试一下。
修改AppTheme的父主题为“Theme.AppCompat.NoActionBar”,该部分代码如下所示:
运行效果如下所示:
这时已经很接近我的目标了,但由于用的是Dark主题,因此TextView的背景色是黑色的,我不希望我的大部分UI控件都是深色系统的,因此这种方式我不想采用。
我把AppTheme的parent改回“Theme.AppCompat.Light.NoActionBar”主题,这时再看一遍当前的运行效果:
这是浅色主题下的表现,接下来尝试改变这些黑色字体。
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使用深色背景,并且将标题、溢出图标及溢出菜单文字改为白色)。
看一下最终的style.xml文件:
Toolbar组件的定义代码:
再看一遍最终效果图吧!
在AppTheme定义中可以加入如下代码改变Title的颜色:
在AppTheme中加入如下代码可改变Toolbar非溢出菜单字体颜色:
折腾了几天,虽然最终弄明白了一点相关知识,也达到了自己最终的目标,但关于Android主题这方面我仍然知之甚少。
任重而道远啊!
当完成了php对redis的扩展之后。发现在ThinkPHP中按照如下方法使用redis会报错:$redis = new Redis();$redis->connect(‘127.0.0.1’,6379);报错:”无法加载缓存类型:127.0.0.1”原因如下:ThinkPHP 会根据命名空间的规则找到框架写好的Redis类(位置:Think\Cache\Dri
转自:https://coolshell.cn/articles/9070.html有一些网友看了前两天的《Linux下应该知道的技巧》希望我能教教他们用awk和sed,所以,出现了这篇文章。我估计这些80后的年轻朋友可能对awk/sed这类上古神器有点陌生了,所以需要我这个老家伙来炒炒冷饭。况且,AWK是贝尔实验室1977年搞出来的文本出现神器,今年是蛇年,是AWK的本命年,而且年纪和..._runoob awk
E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-front解决ubuntu16.04 ‘E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ’ 问题ubuntu提示E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)..._sudo apt upgrade e: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源
编写一个 SQL 查询,获取Employee表中第n高的薪水(Salary)。+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+例如上述Employee表,n = 2时,应返回第二高的薪水200。如果..._leetcode sql 第n高薪水
1、Measles(麻疹) ________ a long time to get over.A.spendB.spendsC.takeD.takes答案:D2、The boy is not happy at the new school. He has ________ friends there.A.fewB.a fewC.littleD.a littl...
· codesearch· Koders· Krugle· Codase· CPAN code search by gonzui· codefetch{ 转载于:https://www.cnblogs.com/heartstill/archive/2010/12/29/1920446.html_找程序代码的网站
本文转自:https://blog.csdn.net/poem_qianmo/article/details/7443540一、random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C++下的rand函数来实现。 1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。r..._c++怎样调节随机数概率
关于C:\Windows\System32\drivers\etc的认识_c:\windows\system32\drivers\etc
备战2022春招或暑期实习,本专栏会持续输出MySQL系列文章,祝大家每天进步亿点点!文末私信作者,我们一起去大厂。 本篇总结的是 《where使用》,后续会每日更新~ 关于《Redis入门到精通》、《并发编程》、《Java全面入门》、《鸿蒙开发》等知识点可以参考我的往期博客 相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!目录1、简介2、正文2.1 where子句位置2.2 操作符2.3 空值null1、简介当我们需要获取数._mysql where 包含
(西瓜书)《机器学习-周志华》-学习笔记:(2-0)第二章 模型评估与选择文章目录(西瓜书)《机器学习-周志华》-学习笔记:(2-0)第二章 模型评估与选择概括2.1经验误差与过拟合一些名词术语过拟合与欠拟合2.2评估方法以测试误差作为泛化误差的近似2.2.1 留出法2.2.2 交叉验证法留一法 : 交叉验证法的特殊情况2.2.3 自助法概括主要总结到了 2.3 新能度量之前。内容有:误差等术语,欠拟合与过拟合的概念。三个从数据集中划分训练集与验证集的方法:留出法、交叉验证法(包括留一法)、自_近似泛化误差
vscode 有时候出现如下解决方法:文件-->首选项->设置 搜索useReplacePreview 然后不勾选即可参考:https://stackoverflow.com/questions/52010796/disable-replace-preview-on-click-in-visual-studio-code..._replace preview
VS2010编程小技巧:1.注意在文档类C..Doc中使用和在视图类C..View中使用MessageBox函数时的参数不相同,不要用错。2.创建与控件关联的指针变量时,一定要注意初始化,不要形成垂悬指针,否则会出现“烫烫烫烫..."”屯屯屯...的乱码。这里我们利用自己的图像函数库去处理数字图像,在掌握基本方法和基本理论后再去结合OpenCV和matlab去实现算法。新建一基于单文档