一个动态加载皮肤资源的换肤框架。
支持 Material Design 风格控件一键换肤
// 项目引用
dependencies {
compile 'com.github.LidongWen:Skin-Loader:0.0.3'
}
// 根目录下引用
repositories {
jcenter()
maven { url "https://www.jitpack.io" }
}
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SkinManager.getInstance().init(getApplicationContext());
}
}
public class MainActivity extends SkinActivity
{
...
}
SkinManager.getInstance().loadSkin(path);
SkinManager.getInstance().restoreDefault();
public class MainActivity extends SkinActivity{
...
@Override
public void changeSkin(SkinResource skinResource) {
customView.setPaintColor(skinResoure.getColorStateList(this,R.id.xxxx));
...
}
}
在布局中 设置 enable_skin
...
xmlns:skin="http://schemas.android.com/android/skin"
...
...
skin:enable_skin="false"
... />
皮肤包(后缀名为.skin)的本质是一个apk文件,该apk文件不包含代码,只包含资源文件。
项目中 skinwrapper 编译完成后的 apk 后缀为 .skin 就是一个皮肤包
android:textColor
android:src
android:background
CardView
cardBackgroundColor
Toolbar
subtitleTextColor
titleTextColor
PopupThemeFloatingActionButton
backgroundTint
rippleColor
srcCompatTabLayout
tabBackground
tabIndicatorColor
tabSelectedTextColor
tabTextColorCollapsingToolbarLayout
contentScrim
0.0.3
设置background bug
0.0.2
修复找不到dialog资源 崩溃的 bug
0.0.1
上面支持的属性不多,还有许多materialDesign控件 以及属性没有支持进来, 说不定 Android 8.0 以后会出现一个 materialDesig_001,materialDesig_002
TEXT_COLOR("textColor") { // 属性名 AttributesName
@Override
public void skin(View view, String resName) {
SkinResource skinResource = getSkinResource();
ColorStateList color = skinResource.getColorByName(resName); // 找到相应资源,
if (color == null) {
return;
}
TextView textView = (TextView) view;
textView.setTextColor(color); // 赋值
}
}