docs/README.md
中文 | 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 SkinCompatSupportable interface
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 prefix
res directoryIf 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.
<table align="center"> <tr align="center"> <td></td> <td></td> <td></td> <td></td> </tr> <tr align="center"> <td><b><a href="https://k.sohu.com/">sohu newsclient lite</a></b></td> <td><b><a href="http://www.iyuji.cn/iyuji/home">voice note</a></b></td> <td><b><a href="https://news.qoo-app.com/">qoo app</a></b></td> <td><b><a href="http://www.dwnews.com/">dwnews</a></b></td> </tr> </table>Pengfeng Wang(王鹏锋)
email: [email protected]