美文网首页
适配深色和浅色模式下ImagView和Button显示不明显的问

适配深色和浅色模式下ImagView和Button显示不明显的问

作者: 哈哈我得意3号 | 来源:发表于2021-08-04 15:39 被阅读0次

    在 android Q版本(10.0)之后,有一个forceDark功能,它可以快速实现黑暗主题的功能。

    问题:存在一个菜单,菜单底下的imagview在light模式下显示正常,但是在dark模式下由于imageview的背景比较黑暗,显示不明显,需要修复

    解决办法:在Attr下定义新的引用,在主题theme下定义引用的是哪部分的资源,如:

    <attr name ="{新的资源名}" format = "reference"/>
    <item name = "{新的资源名}"> @drawable/{drawable文件下的资源}(light模式下的资源文件)
    <item name = "{新的资源名}"> @drawable/{drawable文件下的资源}(dark模式下的资源文件)

    最终在java文件中获取资源文件的时候,直接使用引用名(新的资源名)获取资源即可,系统会根据不同的模式获取不同的资源,对主题进行修改。

    以上解决办法是针对于android10以下的版本进行操作的,对于android10以上的版本,直接引用资源,只要系统配置好,无需使用引用名获取资源,直接使用资源文件名,系统也会根据不同的主题使用不同的资源。
    当然如果想进行尝试,那么就可以使用开始提到的forceDark功能,在获取控件布局文件资源的时候,对控件对象进行ForceDarkAllow属性进行更改。
    当该属性为false时,那么上述方法对资源文件进行不同模式下的引用(当然也需要准备不同模式下的资源文件),当该属性为true时,则系统会自动更新。

    新的问题:有的控件只有一种state(只有light和dark两个资源文件),但是有的控件有两种state(会存在四中资源文件),例如antionBar.setButton()方法中放入的是一个selector(两种资源,enable的false和true),而不是一种vertor(单一资源),那么无法进行引用操作,背景无法看清

    解决办法:
    那么只能对在获取selector的地方对系统主题进行判断(light or dark)如:

    if ((getApplicationContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) !=0)

    然后根据不同主题下获取不同模式的资源即可解决问题。

    相关文章

      网友评论

          本文标题:适配深色和浅色模式下ImagView和Button显示不明显的问

          本文链接:https://www.haomeiwen.com/subject/vmeuvltx.html