# ChangeSkin
基于插件式的Android换肤框架,支持app内和或者外部插件式提供资源的换肤方案,无需重启Activity。
- [致谢](#致谢)
- [支持](#支持)
- [Demo运行](#Demo运行)
- [使用](#使用)
- [声明](#声明)
## 致谢
* [Android换肤技术总结](http://blog.zhaiyifan.cn/2015/09/10/Android%E6%8D%A2%E8%82%A4%E6%8A%80%E6%9C%AF%E6%80%BB%E7%BB%93/)
* [github.com/fengjundev/Android-Skin-Loader](https://github.com/fengjundev/Android-Skin-Loader)
* [App Development: How to Get the Right LayoutInflater](http://willowtreeapps.com/blog/app-development-how-to-get-the-right-layoutinflater/)
* [LayoutInflater Factories](http://blog.bradcampbell.nz/layoutinflater-factories/)
* [Optimizing CustomViews](https://sriramramani.wordpress.com/2012/07/22/optimizing-customviews/)
* [https://github.com/bboyfeiyu/Colorful](https://github.com/bboyfeiyu/Colorful)
## 支持
* 插件的方式提供资源
* 应用内直接提供资源
* 一个插件包提供一套或者多套皮肤
* 应用内直接提供一套或者多套皮肤
## Demo运行
目前的demo,已经包含上述功能的测试。
下载[night_plugin.apk](night_plugin.apk)里面包含资源文件,放到手机或者模拟器SdCard的根目录。
然后import project,运行app。
运行效果图:
<img src="skin_sc.gif" width="320px"/>
无需重启Activity,无缝换肤,资源均来自插件apk中。
## 使用
下载[changeskin](changeskin),作为module依赖至主项目,例如:
```xml
dependencies {
compile project(':changeskin')
}
```
或者直接添加依赖:
```xml
dependencies {
compile 'com.zhy:changeskin:2.0.0'
}
```
### (1)初始化
#### 1、Application中初始化
在你的Application中,去初始化SkinManager,例如:
```java
public class MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
SkinManager.getInstance().init(this);
}
}
```
别忘了注册。
####2、继承BaseSkinActivity
让所有的需要换肤的界面的Activity,继承自`com.zhy.changeskin.base.BaseSkinActivity`。
####3、对于需要换肤的资源命名使用skin开头
比如你的某个控件的背景需要换肤:
```xml
<android.support.v4.widget.DrawerLayout
android:background="@drawable/skin_main_bg"
...
/>
```
字体颜色:
```xml
<TextView android:id="@+id/id_tv_title"
android:textColor="@color/skin_item_text_color"
/>
```
其他的类似。
接下来,针对插件式或者应用内准备皮肤资源即可。
### (2)插件式换肤
#### 1、准备资源apk
>只需要按规则定义下资源名称,然后几行代码就完成了换肤。
然后,单独准备一份插件apk,其实就是普通的项目,仅仅准备需要包含用到的资源即可。
例如:
<img src="skin_2.png" width="400px"/>
搞成apk就不用说了吧。
#### 2、调用API
准备完成资源后,调用:
```java
SkinManager.getInstance().changeSkin(
mSkinPkgPath,
"com.zhy.plugin",
new ISkinChangingCallback()
{
@Override
public void onStart()
{
}
@Override
public void onError(Exception e)
{
Toast.makeText(MainActivity.this, "换肤失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete()
{
Toast.makeText(MainActivity.this, "换肤成功", Toast.LENGTH_SHORT).show();
}
});
```
即可完成换肤。第一个参数为插件apk的路径,第二个参数为插件apk的packageName.
记得设置读取存储卡权限。
当然你也可以调用
```java
SkinManager.getInstance().removeAnySkin();
```
重置为初始状态。
###(3)应用内换肤
#### 1、准备资源apk
这个就简单了,因为应用内换肤那么你肯定有多套资源,比如有一个背景图叫做:
skin\_main\_bg
那么你可以准备一套皮肤资源,命名为:
skin\_main\_bg\_后缀
这二个后缀你自己决定,例如:
<img src="skin_usage_02.png" width="600px"/>
上图,我准备了两套应用内的皮肤。
#### 2、调用换肤API
```java
SkinManager.getInstance().changeSkin("red");
```
参数传入你的后缀名即可。
详情参考demo.
## 声明
感谢:[drakeet](https://github.com/drakeet)的提醒.
恩,看来得说明下,首先对于换肤,从Simple发布的Colorful项目开始关注,搜索了大量的资料,因为希望是可以支持插件式,一直寻找合适的资源替换方案,后来搜索到这篇博文[Android换肤技术总结](http://blog.zhaiyifan.cn/2015/09/10/Android%E6%8D%A2%E8%82%A4%E6%8A%80%E6%9C%AF%E6%80%BB%E7%BB%93/),里面提到了一些方案。很开心的是,发现了这个库:[https://github.com/fengjundev/Android-Skin-Loader](https://github.com/fengjundev/Android-Skin-Loader)有极大的参考价值。该库通过为LayoutInfalter去设置自定义Factory,对加载的View进行分析和提取,方案还是不错的。
该库也就成为本库的一个资源替换原理的一个核心的突破点。
当然,后来对于LayoutInflater.Factory又做了一些的分析,感觉侵入性有点大,主要担心对于AppCompat一些support的影响。于是选择,直接重写Activity的onCreateView等方法。因为本库的预期准备支持app内和或者外部插件式提供资源的换肤方案,为了方便变采用了资源名称的约束,所以修改幅度较大,也就没准备针对Android-Skin-Loader库提交PR。
后面会编写博客叙述该库的原理等。
哈,本身想做好一件事,被提醒的感觉也是蛮不好的,所以我回复的语气也较为不客气,这里致歉~~~ 最后还要感谢[drakeet](https://github.com/drakeet)善意的提醒。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
高仿QQ空间 侧滑Menu效果并且提供换肤功能,本项目大体结构是 首先有一个换肤基类BaseSkinActivity,然后其他activity都继承这个基类, 类中提供com.zhy.changeskin.SkinManager.getInstance().changeSkin()更改皮肤 ,侧滑部分通过DrawerLayout来实现的。
资源推荐
资源详情
资源评论
收起资源包目录
Android 高仿QQ空间侧滑Menu效果且实现插件式换肤功能 源码 (1739个子文件)
changeskin-release.aar 30KB
MediaSessionCompat.aidl 787B
MediaSessionCompat.aidl 787B
ParcelableVolumeInfo.aidl 689B
ParcelableVolumeInfo.aidl 689B
PlaybackStateCompat.aidl 688B
PlaybackStateCompat.aidl 688B
MediaMetadataCompat.aidl 680B
MediaMetadataCompat.aidl 680B
RatingCompat.aidl 673B
RatingCompat.aidl 673B
resources-debug.ap_ 777KB
resources-debug-androidTest.ap_ 765B
app-debug.apk 1.44MB
app-debug-unaligned.apk 1.44MB
gradlew.bat 2KB
fileSnapshots.bin 472KB
fileHashes.bin 157KB
taskArtifacts.bin 38KB
outputFileStates.bin 20KB
gradle_project_sync_data.bin 694B
R$style.class 21KB
R$styleable.class 20KB
R$style.class 18KB
R$style.class 18KB
R$style.class 18KB
R$styleable.class 18KB
R$styleable.class 18KB
R$styleable.class 18KB
R$attr.class 11KB
SkinManager.class 9KB
R$attr.class 9KB
R$attr.class 9KB
R$attr.class 9KB
BaseSkinActivity.class 8KB
R$dimen.class 5KB
R$id.class 5KB
R$color.class 4KB
R$dimen.class 4KB
R$drawable.class 4KB
R$dimen.class 4KB
R$id.class 4KB
R$dimen.class 4KB
R$color.class 4KB
R$drawable.class 4KB
R$color.class 4KB
R$color.class 4KB
R$id.class 4KB
R$drawable.class 4KB
R$id.class 4KB
R$drawable.class 4KB
MainActivity.class 3KB
R$layout.class 3KB
MenuLeftFragment.class 3KB
SkinAttrSupport.class 2KB
ResourceManager.class 2KB
R$layout.class 2KB
R$layout.class 2KB
R$layout.class 2KB
SkinManager$1.class 2KB
SkinAttrType.class 2KB
MainActivity$2.class 2KB
PrefUtils.class 2KB
MainActivity$1.class 2KB
R$string.class 2KB
R$string.class 1KB
R$string.class 1KB
R$string.class 1KB
MenuLeftFragment$2$1.class 1KB
MenuLeftFragment$2.class 1KB
SkinAttrType$3.class 1KB
SkinAttrType$2.class 1KB
SkinAttrType$1.class 1KB
SkinView.class 1KB
MainActivity$3.class 1KB
R.class 1023B
R.class 1019B
MenuLeftFragment$1.class 971B
R$anim.class 923B
R$bool.class 897B
R.class 879B
R.class 879B
R$bool.class 820B
R$anim.class 813B
R$bool.class 799B
R$anim.class 792B
R$bool.class 790B
ISkinChangingCallback$DefaultSkinChangingCallback.class 787B
R$anim.class 783B
SkinAttr.class 760B
BuildConfig.class 720B
R$integer.class 712B
R$integer.class 657B
L.class 642B
R$integer.class 636B
SkinManager$SingletonHolder.class 635B
R$integer.class 627B
ISkinChangingCallback.class 622B
SkinConfig.class 605B
BuildConfig.class 576B
共 1739 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
资源评论
LeBron_Six
- 粉丝: 803
- 资源: 207
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功