初步了解安卓的主题更换


换肤一般分为两种:插件换肤和主题换肤
  1. 插件换肤就是所谓的apk换肤,将需要更换的属性写好打成apk包放在asset下,然后在更换操作时,通过包名找到属性值进行更换。
  2. 主题换肤就是在工程中配置多套主题,每套主题对应不同的资源。

主题换肤

主题换肤一般用的是自定义属性而不是固定在xml中写死的属性如 android:background="#ffffff".首先我们可以现在res-values下新建一个custome_attrs.xml文件里面的内容为自定义属性如:

初步了解安卓的主题更换_第1张图片

然后在res-values下的styles.xml中定义我们的主题如:


初步了解安卓的主题更换_第2张图片

最后在布局中写入自定义的属性值如:

初步了解安卓的主题更换_第3张图片

在activity中setContentView()前调用setTheme()就可以加载我们需要的主题。但是这个只是针对于还未打开的activity的主题的变化。对于那些应打开的activity由于ui已经绘制完成,主题并未发生变化,需要手动触发让系统刷新ui:

  1. 调用recreat()方法,利用onSaveInstanceState()保存好当前activity的状态。
  2. 手动加载当前主题的应用资源。从当前主题获取需要的资源。

你可能感兴趣的:(初步了解安卓的主题更换)