记录那些年使用 Material Design 掉过的坑

来源:互联网 发布:mac双系统 文件 编辑:程序博客网 时间:2024/06/05 15:45

写在前面的话,本篇文章用于适用于刚接触Material Design或学生党,

扫地僧们请自行绕道。

  1. 自定义Toolbar 以include 形式引入的时候,根布局设置了toolbar 如

果使用ButterKnife注解会报空指针异常(掉坑指数3颗星) 例如:

base基类中抽离toolbar

抽离公共部分toolbar

具体通过include引入

具体通过include引入

@BindView(R.id.toolBar)
Toolbar toolBar;

通过 ButterKnife 获取id 会报空指针错误

解决办法
取消抽离基类中id的定义,直接绑定include 中 id 即可.例如:

基类布局中已取消id定义

基类中已取消id定义

具体布局中id修改为toolbar(当然这里可以自己定义其他,之所以用toolbar 是为了保持绑定一致性,有利于代码阅读)

具体布局中id修改为toolbar

然后使用@BindView(R.id.toolBar)
Toolbar toolBar;
即可正常调用

2 自定义Toolbar 和系统Toolbar冲突,启动程序后发现自定义Toolbar

位于 系统Toolbar 下面,并未替换掉系统自带Toolbar(掉坑指数3颗星)

例如: 当你辛辛苦苦的自定义toolbar布局写完,急匆匆的想看看效果这

是你期望的效果

期望的效果

实际效果确实这样的

实际效果

这时候我想你内心的洪荒之力一定大吼一声what a fuck 。说好的自定义

toolbar呢,说好的自定义标题呢,特么逗我啊。这个道理告诉我骚年不

是码行深,是你太天真。不过不要紧,既然掉坑了,那就撸起袖子在爬起来。分析下,问题点可以看到,首先,自定义的Toolbar 和系统的一起出现,说明系统并没认可自定义Toolbar ,其次,自定义的标题也没有被替换。明白了问题点,那就针对问题点解决:

解决办法
1 重复的toolbar 可以在 style下面先取消系统的标题栏

取消系统的标题栏
这时候,想下,去掉了标题栏,如果这时候运行程序的话,那自定义的Toolbar 就会报空指针(不相信的骚年们,可以试下),既然取消了系统的那就意味着必须加上自己的Toolbar 可以使用setSupportActionBar(toolBar);方法来设置

加上自定义toolbar

这个时候运行代码,你会发现神奇的一幕出现了,系统的Toolbar已经被替换了,就是这么神奇。

神奇的一幕

可是,我们还是发现了小问题,自定义的标题并没有被替换,怎么解决呢

首先在自定义TextView 加上系统toolbar风格样式style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"

加上系统toolbar风格样式

其次,在代码中屏蔽系统的toolbar的显示

屏蔽系统的toolbar的显示

再次运行代码,OK 搞定。

期望的效果

阅读全文
0 0
原创粉丝点击