不重启APP切换主题
MagicaSakura提供了全局方法Theme.refreshUI,直接调用即可无需重启App更换应用主题(当然必须得在主线程-,-),同时该方法提供了额外的回调参数,以便满足在主题切换过程中的各种自定义需求。
自适应多主题
-
Drawable XML
使用预先定义的颜色值,只需编写一份drawable即可自动适配多主题样式,无需再为每一种主题都编写一份drawable或style。-
selector,item , shape, layerlist,color 等常规xml标签都已支持,能满足应用基本开发需求。
-
额外支持在xml中直接染色 (app : drawableTint , app : drawableTintMode) 以及在shape标签中配置颜色透明度(android : alpha)。如:
- 直接染色
<selector <item android:drawable="@drawable/icon " android:state_pressed="true"
- 直接染色
-
app:drawableTint="@color/theme_color_primary" />
<item android:drawable="@drawable/icon" app:drawableTint="@color/gray_dark" />
</selector>
```
- 标签配置颜色透明度
```java
<selector
<item android:state_enabled="true" android:state_pressed="true">
<shape>
<corners android:radius="4dp" />
<solid android:color="@color/theme_color_primary_dark" />
</shape>
</item>
<item android:state_enabled="true">
<shape>
<solid android:color="@color/theme_color_primary" />
<corners android:radius="4dp" />
</shape>
</item>
<item android:state_enabled="false">
<shape>
<solid android:alpha="0.3" android:color="@color/theme_color_primary" />
<corners android:radius="4dp" />
</shape>
</item>
</selector>
```
-
Layout XML
使用MagicaSakura中的提供的TintXXX控件可以在layout 中直接对其drawable属性进行染色,如:background, src, drawableLeft, button 等,并且包括文字颜色,超链接颜色在内都可以自动跟随多主题变化,非常快捷方便。
- **代码中适配多主题**
MagicaSakura支持在代码中直接适配多主题。
- 对于MagicaSakura中的TintXXX控件
在代码中可以直接对TintXXX控件的相关drawable进行染色,使用方法与Android原生控件基本一致,例子如下:
``` java
//TextView的background是一个shape类型的selector,那么就可以直接调用setBackgroundResource()方法进行染色。
tintTextView.setBackgroundResource(R.drawable.selector_shape_lock);
//ImageView的src是一个包含png的selector,那么只需比Android原生控件多调用一个方法。
tintImageView.setImageResource(R.drawable.selecor_png_lock);
tintImageView.setImageTintList(R.color.selector_color_lock);
- 对于一些特殊需求或一些自定义控件
MagicaSakura中提供了ThemeUtils工具类,该工具类主要提供了drawable染色以及主题色自动转换的相关方法,其中主题色自动转换支持colorStateList和 color,可以非常方便的在代码中进行多主题适配。// R.color.selector_color.lock 通过 getThemeColorStateList转换,返回主题色相关的colorStateList。 ThemeUtils.getThemeColorStateList(context, R.color.selector_color.lock);
兼容低版本的Android系统
MagicaSakura目前兼容的最低SDK版本为API 15,即Android 4.0.3版本,基本符合绝大多数APP开发中的最低API要求。
尽量减少学习成本
为减少学习成本,MagicaSakura基于Android原生控件封装了一套TintXXX控件,包含所有常用的控件类型,如:TextView,Button,EditText, ProgressDialog等,能基本满足常规应用开发需求。
TintXXX控件可自动适配多主题样式,支持在layout.xml,drawable.xml 和代码中配置。特别的在layout.xml中可以方便地与Android原生属性配合使用,如 app:drawableLeftTint可以直接染色android:drawableLeft,app: backgroundTint 直接染色android:background等。
关于夜间模式和多主题皮肤
多主题皮肤和多彩主题是不完全相同的,支持多主题皮肤一般需要引入插件框架,而多彩主题则相对轻量一些。目前MagicaSakura暂不支持多主题皮肤,以后会考虑增加对其的支持。
开源
经过几周的筹备和优化,现正式将多主题框架MagicaSakura开源,希望能对你有所帮助。