记录那些年使用 Material Design 掉过的坑
写在前面的话,本篇文章用于适用于刚接触Material Design或学生党,
扫地僧们请自行绕道。
- 自定义Toolbar 以include 形式引入的时候,根布局设置了toolbar 如
果使用ButterKnife注解会报空指针异常(掉坑指数3颗星) 例如:
base基类中抽离toolbar
具体通过include引入
@BindView(R.id.toolBar)
Toolbar toolBar;
通过 ButterKnife 获取id 会报空指针错误
解决办法
取消抽离基类中id的定义,直接绑定include 中 id 即可.例如:
基类布局中已取消id定义
具体布局中id修改为toolbar(当然这里可以自己定义其他,之所以用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已经被替换了,就是这么神奇。
可是,我们还是发现了小问题,自定义的标题并没有被替换,怎么解决呢
首先在自定义TextView 加上系统toolbar风格样式style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
其次,在代码中屏蔽系统的toolbar的显示
再次运行代码,OK 搞定。