介紹
Android-skin-support: 一款用心去做的Android 換膚框架, 極低的學(xué)習(xí)成本, 極好的用戶體驗(yàn).
重要的事情說三遍:
只需要兩行代碼, 就可以實(shí)現(xiàn)換膚, 你值得擁有!!!
只需要兩行代碼, 就可以實(shí)現(xiàn)換膚, 你值得擁有!!!
只需要兩行代碼, 就可以實(shí)現(xiàn)換膚, 你值得擁有!!!
第一行: 在Application的onCreate中初始化
SkinCompatManager.init(this).loadSkin();
第二行: 繼承自SkinCompatActivity
public class BaseActivity extends SkinCompatActivity {}
就這么簡單, 你的APK已經(jīng)擁有了強(qiáng)大的換膚功能.
skin-app // 換膚demo app
skin-night // 換膚demo 夜間模式
skin-support // 換膚框架, 基礎(chǔ)控件支持
skin-support-design // 換膚框架, Material Design 支持
最佳實(shí)踐
支持
目前支持:
支持Android 4.x, 5.x, 6.x, 7.x
-
skin-support: appcompat-v7 支持
- View
- Button
- CheckBox
- EditText
- TextView
- ImageView
- ImageButton
- RadioButton
- FrameLayout
- LinearLayout
- RelativeLayout
- CheckedTextView
- AutoCompleteTextView
- MultiAutoCompleteTextView
- android.support.v7.widget.Toolbar
-
skin-support-design: material design 支持
- TabLayout
- AppBarLayout
- NavigationView
- 更多控件支持, 期待你們加入
用法
導(dǎo)入:
git clone https://github.com/ximsfei/Android-skin-support.git
選擇需要的module依賴:
// aar
dependencies {
compile(name: 'skin-support-release', ext: 'aar') // Android 基礎(chǔ)控件, 及V7包中的一些控件
compile(name: 'skin-support-design-release', ext: 'aar') // Android support design包中的一些控件
}
或者
dependencies {
compile project(':skin-support')
compile project(':skin-support-design')
}
或者
// 可以打開調(diào)試日志
dependencies {
releaseCompile project(path: ':skin-support', configuration: 'release')
debugCompile project(path: ':skin-support', configuration: 'debug')
releaseCompile project(path: ':skin-support-design', configuration: 'release')
debugCompile project(path: ':skin-support-design', configuration: 'debug')
}
初始化:
在Application的onCreate中初始化
@Override
public void onCreate() {
super.onCreate();
SkinCompatManager.init(this).loadSkin(); // 應(yīng)用啟動(dòng)加載當(dāng)前(保存在SharedPreferences中)皮膚庫
}
繼承SkinCompatActivity
讓所有需要換膚的Activity繼承自skin.support.app.SkinCompatActivity
.
public class BaseActivity extends SkinCompatActivity {}
加載插件皮膚庫
// 指定皮膚插件, 并且監(jiān)聽加載狀態(tài)
SkinCompatManager.getInstance().loadSkin("new.skin");
// 恢復(fù)應(yīng)用默認(rèn)皮膚
SkinCompatManager.getInstance().restoreDefaultTheme();
自定義View換膚
要點(diǎn):
- 實(shí)現(xiàn)SkinCompatSupportable接口
- 在構(gòu)造方法中解析出需要換膚的resId
- 在applySkin方法中實(shí)現(xiàn)換膚
實(shí)現(xiàn):
- 自定義View可以直接繼承自SkinCompatView, SkinCompatLinearLayout等已有控件
eg: CustomTextView - 不想繼承自已有控件
eg: CustomTextView2 - 需要換膚自定義屬性
// 需要換膚AutoCompleteTextView的R.attr.popupBackground屬性
eg: SkinCompatAutoCompleteTextView - 需要使用第三方庫控件怎么辦
// 需要使用https://github.com/hdodenhof/CircleImageView 控件, 并且要支持換膚
eg: CustomCircleImageView
制作皮膚插件:
新建Android application工程
將需要換膚的資源放到res目錄下(同名資源)
打包生成apk, 即為皮膚包
交流合作
深入研究發(fā)現(xiàn)Android換膚原理其實(shí)不難, 難在要實(shí)現(xiàn)一個(gè)完善的換膚框架所帶來的工作量, 所以在沒有特殊原因的前提下, 希望大家多多使用, 多多交流, 為本項(xiàng)目貢獻(xiàn)自己的力量, 為所有Android開發(fā)者帶來福音, 減少?zèng)]必要的工作量.
致謝
- Android-Skin-Loader
- android com.android.support:appcompat-v7源碼