博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 项目中Theme的改造
阅读量:2356 次
发布时间:2019-05-10

本文共 1780 字,大约阅读时间需要 5 分钟。

前言: 为什么会选这个话题

由于项目老旧,项目里留存了很多古董玩意儿,既然看到了不爽的地方,身为程序员强烈的责任感,不得不进行改造,今天就来说说统一 Android Theme 中遇到的那些事儿

缘由

我们都知道 Android 系统有很严重的碎片化问题,最明显的表象是手机系统升级大多数不能超过两代,什么意思呢?

简单说就是老机器买来是 5.0 系统,基本升不到 8.0 系统或更高。

可能原因有很多,鄙人也不敢随便揣测,那么过程中呢,出现了各种 AppCompat suppor包, 这些包为开发 app 带来兼容体验,

当然过程中可能发现兼容包有些不可控了,所以现在的主推的是 AndroidX,万剑归宗的感觉。

那么Theme 跟这个碎片化有什么关系呢?

Theme 也经过了几个版本的流行时代,普通 theme 的写法如下

@android:style/Theme.xxx

4.0 之后流行起了 Materail Design,  Android 系统中也默认自带了 theme

@android:style/Theme.Material.xxx

5.0后推出了 appcompat-v7 中的 theme

@style/Theme.AppCompat.xxx

项目中使用的是最普通的 theme,不支持沉浸式,不支持继承自 AppCompatActivity,也会影响部分系统的导航键层级(实测 MUI系统中使用普通 theme 导航键永远处于 window 的最上层)

步骤一:引用整体替换

把 styles.xml 中 parent  引用自 @android:style/Theme.xxx 全部替换为@style/Theme.AppCompat.xxx

这里可以使用as的 ctrl + R 进行快捷全局替换

步骤二:添加MD支持的属性

在base theme中添加如下属性:

  
true   
#ffffff   
#ffffff   
#ffffff   
true   
  
@android:style/Widget.Button

因为 app 中页面头部皆为白色,所以把状态栏属性改为白色

顺手做了下冷启动的 theme, 设置在 SplashActivity 上

  
@drawable/splash_bg   
false   
  
false

drawable/splash_bg.xml文件:

    
        
    
    
    
        
    
问题出现与解决

如果不出意外的话,as 已经开始报红色波浪线了,因为styles.xml 中某些属性会有系统兼容的问题,这时候用文件夹兼容方式解决

  • 在 res 下创建文件夹values-v21 及 values-v23

  • -v21 就代表5.0系统会使用该文件夹下的 values 配置

  • -v23 代表6.0系统会使用文件夹下的 values 配置

  • 综上配置,Android 系统会在5.0以下系统选择 values 配置,5.0 - 5.1 选择 values-v21 配置, 6.0+ 会选择values-v23配置

当然这些操作可以用as 中解决问题快捷键 alt + enter 来自动创建对应的样式

这样做了以后,还会出现 5.0系统状态栏白底色把文字颜色混合,导致看不到文字,直接改成黑色:

  
true   
#ffffff   
#ffffff

                        喜欢 就关注吧,欢迎投稿!

转载地址:http://cpbtb.baihongyu.com/

你可能感兴趣的文章
linux服务器历险之linux性能监控
查看>>
python的函数 参数的默认值
查看>>
用 None 和文档字符串来描述具有动态默认值的参数
查看>>
程序员常去的14个顶级开发社区
查看>>
Linux(CentOS)下,下载安装Nginx并配置
查看>>
Nginx 配置从零开始
查看>>
配置 实现nginx 简单正向代理
查看>>
groovy 使用变量值作为 map 的key--需要注意的
查看>>
nginx反向代理配置
查看>>
ubuntu( mint )下 vi输入方向键会变成ABCD的解决方法
查看>>
SSH Secure Shell登录报错: Ubuntu SSH Algorithm negotiation failed
查看>>
ubuntu设置tightvncserver自动启动
查看>>
如何把groovy对象的全部属性取出,无需逐个访问
查看>>
deb和rpm包相互转换
查看>>
mysql安装在centos7报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
查看>>
Install MongoDB Enterprise on Red Hat Enterprise or CentOS
查看>>
MongoDB 聚合管道(一)(Aggregation Pipeline)
查看>>
MongoDB 聚合管道(二)(Aggregation Pipeline)
查看>>
Groovy创建和解析json
查看>>
使用Groovy操作文件
查看>>