天天看点

Android无缝切换主题,动态换肤

说起Android的动态换肤方案,可谓是人云亦云,各有各的方法,鱼龙混杂,我实在是参考不来一个好的换肤方案。

于是准备自己搞一个。

在这里我是拒绝写多个style实现换肤的

Android无缝切换主题,动态换肤

那么只能用Java代码来实现(话说这样是不是有点难度啊,答案是否定的,难倒是不难,就是稍微麻烦点)

首先简述一下整体的思路:

Android无缝切换主题,动态换肤

1.在Activity中的onCreate中,检查当前设置的theme样式(随意用什么方式实现存储,主要是拿到当前设定的样式)

2.开始setContentView,这里就要进行判断和语句分支了:if(mode1){...}else if(mode2){...},开始使用代码的方式为布局设定颜色等

3.新增 reloadView 接口,这样做的目的是在用户切换主题后重新设定布局颜色等,实现动态切换主题。

这样做的确是个不错的方法(个人感觉

Android无缝切换主题,动态换肤

),但是如果Activity中有一个listView,也可能有很多层嵌套的chilView,这样的话就有一些麻烦,每一个view都需要准备两种主题。。。。反正就是这样,动态换肤本来就是这么繁琐

Activity的问题解决了,可是Activity里还嵌套了Fragment怎么破?

别急,先看思路:

Android无缝切换主题,动态换肤

还是一样的套路,Fragment中新增ReloadView方法,目的也是起到一个刷新的作用,当宿主Activity被执行ReloadView方法时,也应当通知当前活动在Fragment栈中的对象,并调用Fragment中的ReloadView方法,执行动态换肤。。。

Android无缝切换主题,动态换肤

以上思路可以快速解决动态换肤,谢谢观看~