中文 | In English
Android-skin-support is an easy skin framework to use for Android. The best case, Only one line of code to integrate the framework.
SkinCompatManager.withoutActivity(this).loadSkin();Now, you have a strong skinning feature. What you need to do is make a skin.
The Gradle Dependency is available via jCenter,
For the latest version, please refer to change log
Add dependencies for AndroidX
implementation 'skin.support:skin-support:4.0.5' // skin-support
implementation 'skin.support:skin-support-appcompat:4.0.5' // skin-support basic widget
implementation 'skin.support:skin-support-design:4.0.5' // skin-support-design material design support [selectable]
implementation 'skin.support:skin-support-cardview:4.0.5' // skin-support-cardview CardView support [selectable]
implementation 'skin.support:skin-support-constraint-layout:4.0.5' // skin-support-constraint-layout ConstraintLayout support [selectable]Add dependencies for support libraries
implementation 'skin.support:skin-support:3.1.4' // skin-support basic widget
implementation 'skin.support:skin-support-design:3.1.4' // skin-support-design material design support [selectable]
implementation 'skin.support:skin-support-cardview:3.1.4' // skin-support-cardview CardView support [selectable]
implementation 'skin.support:skin-support-constraint-layout:3.1.4' // skin-support-constraint-layout ConstraintLayout support [selectable]Only one line of code to integrate the framework.
@Override
public void onCreate() {
super.onCreate();
SkinCompatManager.withoutActivity(this) // Basic Widget support
.addInflater(new SkinMaterialViewInflater()) // material design support [selectable]
.addInflater(new SkinConstraintViewInflater()) // ConstraintLayout support [selectable]
.addInflater(new SkinCardViewInflater()) // CardView v7 support [selectable]
.setSkinStatusBarColorEnable(false) // Disable statusBarColor skin support,default true [selectable]
.setSkinWindowBackgroundEnable(false) // Disable windowBackground skin support,default true [selectable]
.loadSkin();
}If your Activity inherits from AppCompatActivity, you need to override the getDelegate() method.
@NonNull
@Override
public AppCompatDelegate getDelegate() {
return SkinAppCompatDelegateImpl.get(this, this);
}// Load the specified skin
SkinCompatManager.getInstance().loadSkin("new.skin"[, SkinLoaderListener], int strategy);
// restore default skin
SkinCompatManager.getInstance().restoreDefaultTheme();-
Implement the
SkinCompatSupportableinterface -
Apply skin resource in the applySkin method
-
Resolve the skin resource id in the constructor
-
Custom View can inherit directly from existing widget, such as
SkinCompatView,SkinCompatLinearLayout, etc.eg: CustomTextView
-
if you don't want to inherit from existing widget.
eg: CustomTextView2
-
If you need to skin the custom attributes.
// such as AutoCompleteTextView's R.attr.popupBackground attribute
-
If you need to use third-party library.
// need to use https://github.com/hdodenhof/CircleImageView widget
BuildIn Skin,if the skin name is night; Add a resource that needs to be skinned with a suffix _night or prefix night_.
if the default resource is R.color.windowBackgroundColor, then you can add a resource R.color.windowBackgroundColor_night。
load buildIn skin:
SkinCompatManager.getInstance().loadSkin("night", SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN); // load by suffix
SkinCompatManager.getInstance().loadSkin("night", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN); // load by prefixIf the original window background is
colors.xml
<color name="background">#ffffff</color>for night-mode you can add this in the skin-night project
colors.xml
<color name="background">#000000</color>You can rename night.apk to night.skin by yourself.
You can put the skin package into the assets/skins directory.
SkinCompatManager.getInstance().loadSkin("night.skin", SkinCompatManager.SKIN_LOADER_STRATEGY_ASSETS);Or you can customize the loading strategy:
For example:
Inherit from SkinSDCardLoader,Override the getSkinPath、getType methods。
public class CustomSDCardLoader extends SkinSDCardLoader {
public static final int SKIN_LOADER_STRATEGY_SDCARD = Integer.MAX_VALUE;
@Override
protected String getSkinPath(Context context, String skinName) {
return new File(SkinFileUtils.getSkinDir(context), skinName).getAbsolutePath();
}
@Override
public int getType() {
return SKIN_LOADER_STRATEGY_SDCARD;
}
}Register this strategy in Application's onCreate
SkinCompatManager.withoutActivity(this).addStrategy(new CustomSDCardLoader());Use this strategy to load skin:
SkinCompatManager.getInstance().loadSkin("night.skin", null, CustomSDCardLoader.SKIN_LOADER_STRATEGY_SDCARD);If you want to list your apk here. Welcome to commit pull request or Contact the author.
![]() |
![]() |
||
| sohu newsclient lite | voice note | qoo app | dwnews |
Pengfeng Wang(王鹏锋)
email: [email protected]




