谈谈修改actionbar的背景色和title字体颜色

背景

app中显示时间电量等信息那位置称为状态栏,再往下部分称为标题栏目,标题栏之前一般是actionbar实现的,5.0之后google推出了toolbar来替代actionbar。最早大多数app的标题栏都是黑底白字,比如微信的大部分页面,但微信某些三级页面标题栏变成了灰底黑字。后来趋势是背景色为比较亮眼的颜色,字体为白色,比如支付宝的标题栏就是蓝底白字,嗯,我们的app也是这样的。现在趋势又变成白底黑字,淘宝京东也是这样的,于是设计也想把我们的app统一改成白底黑字的标题栏。

由于历史原因我们的标题蓝是用actionbar实现的,在清单文件中直接标注lable和theme属性来实现的

        

主题AppTheme的各种属性

    

改造之旅

于是我也尝试直接修改theme属性来实现将actionbar变为白底黑字,



actionBarStyle改变ActionBar的背景颜色,


titleTextStyle设置title的字体颜色和大小


然而在我的测试机(api23)上的实际效果确是title看不见,仔细检查了下也试了直接将style中actionbar中tittle字体设置写在一起,但还在白底情况下看不见title,究其原因是title字体依旧是白色的,在白底情况下自然是看不到title的。后来我追踪了下我手机API23 theme style的代码,发现压根没有修改tittle颜色的属性。所以修改title颜色不生效 ?

其他尝试

过度实现方案是在activity中用html的方式设置title,html的font color属性设置想要的title字体颜色即可。这里说下在theme中通过stytle无法设置title字体颜色的,在activi

    
    supportActionBar?.elevation = HardwareParameter.getOneDpToPx(this)
        supportActionBar?.title = Html.fromHtml("My Order")   //通过修改  theme 方式无法实现修改 title 字体颜色(也许是因为API23机型上有这问题)
        //设置状态栏文字颜色及图标为深色
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

终极方案

通过style方式实现,parent="@style/Widget.AppCompat.ActionBar.Solid",否则类似上个方案那样无法实现的。



    

    

思考

  1. 因为项目集成的是AppCompatActivity,对应的主题为parent="Theme.AppCompat.Light.DarkActionBar",如果直接在minifest中Theme会闪退。如果将此主题继承Theme.Holo或其子类,对应的继承自AppCompatActivity修改为继承activity,在按照常规方法在主题中修改是有效果的
  2. android5.0后推出的actionbar替代者toolbar,很好的能实现自定义标题栏的各种自定义。修改背景色和字体颜色等就都不是问题了,但是toolbar不能像actionbar一样直接在minifest的theme设置属性即可,而需要在layout或者activity代码中些,相比稍显复杂。

ps:欢迎交流,通过我这种html方式设置actionbar的title也是下下策,国际化问题也不是很好处理。actoinbar底部的一条分割线elevation如何实现?在style中是实现不了的,代码中倒是能实现?

你可能感兴趣的:(谈谈修改actionbar的背景色和title字体颜色)