gihub地址:https://github.com/ximsfei/Android-skin-support
樣例:
默認:
更換后:
一、引入依賴:
// -- 換膚依賴implementation 'skin.support:skin-support:4.0.5'// skin-supportimplementation 'skin.support:skin-support-appcompat:4.0.5'// skin-support 基礎控件支持implementation 'skin.support:skin-support-design:4.0.5'// skin-support-design material design 控件支持[可選]implementation 'skin.support:skin-support-cardview:4.0.5'// skin-support-cardview CardView 控件支持[可選]implementation 'skin.support:skin-support-constraint-layout:4.0.5'// skin-support-constraint-layout ConstraintLayout 控件支持[可選]
二、創建MyApplication:
public class Myapplication extends Application {@Overridepublic void onCreate() {super.onCreate();SkinCompatManager.withoutActivity(this).addInflater(new SkinAppCompatViewInflater()) // 基礎控件換膚初始化.addInflater(new SkinMaterialViewInflater()) // material design 控件換膚初始化[可選].addInflater(new SkinConstraintViewInflater()) // ConstraintLayout 控件換膚初始化[可選].addInflater(new SkinCardViewInflater()) // CardView v7 控件換膚初始化[可選].setSkinStatusBarColorEnable(false) // 關閉狀態欄換膚,默認打開[可選].setSkinWindowBackgroundEnable(false) // 關閉windowBackground換膚,默認打開[可選].loadSkin();}}
AndroidManifest.xml配置MyApplication.java:
三、創建需要換膚的資源
?
(1)選中main -> 右鍵New->Directory 創建res-后綴名
?(2)res-后綴名資源文件下創建對應的drawable、values等資源文件,如下圖所示
以res-red資源為例:
shape_my_info_bg_red.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><gradientandroid:angle="90"android:endColor="#E91E63"android:startColor="#70E91E63" />
</shape>
?colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources><color name="skin_topbar_text_color_red">#860F08</color><color name="skin_button_color_red">#CA493F</color>
</resources>
四、初始布局使用默認res文件下資源
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/shape_my_info_bg"tools:context=".MainActivity"><!--標題--><TextViewandroid:id="@+id/topBarTv"android:layout_width="match_parent"android:layout_height="60dp"android:gravity="center"android:textStyle="bold"android:textSize="20sp"android:text="標題信息"android:textColor="@color/skin_topbar_text_color"/><Buttonandroid:id="@+id/changeBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:background="@drawable/shape_my_info_bg"android:textStyle="bold"android:textColor="@color/skin_button_color"android:text="一鍵換膚(默認顏色)"/><Buttonandroid:id="@+id/changeRedBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:background="@drawable/shape_my_info_bg"android:textStyle="bold"android:textColor="@color/skin_button_color"android:text="一鍵換膚(紅色)"/><Buttonandroid:id="@+id/changeYellowBtn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:background="@drawable/shape_my_info_bg"android:textStyle="bold"android:textColor="@color/skin_button_color"android:text="一鍵換膚(黃色)"/></LinearLayout>
五、使用
public class MainActivity extends AppCompatActivity implements View.OnClickListener{// 換膚按鈕// 默認皮膚private Button changeBtn;// 紅色皮膚private Button changeRedBtn;// 黃色皮膚private Button changeYellowBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initControls();}// 控件初始化private void initControls(){// 默認顏色changeBtn = findViewById(R.id.changeBtn);changeBtn.setOnClickListener(this);// 紅色changeRedBtn = findViewById(R.id.changeRedBtn);changeRedBtn.setOnClickListener(this);// 黃色changeYellowBtn = findViewById(R.id.changeYellowBtn);changeYellowBtn.setOnClickListener(this);}/*** 點擊事件* */@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.changeBtn:// 默認顏色// 恢復默認皮膚SkinCompatManager.getInstance().restoreDefaultTheme();break;case R.id.changeRedBtn:// 紅色// 前綴加載//SkinCompatManager.getInstance().loadSkin("light", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN);// 后綴加載SkinCompatManager.getInstance().loadSkin("red", null,SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);break;case R.id.changeYellowBtn:// 黃色// 前綴加載//SkinCompatManager.getInstance().loadSkin("light", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN);// 后綴加載SkinCompatManager.getInstance().loadSkin("yellow", null,SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);break;}}/*** 如果項目中使用的Activity繼承自AppCompatActivity,需要重載getDelegate()方法* */@NonNull@Overridepublic AppCompatDelegate getDelegate() {return SkinAppCompatDelegateImpl.get(this, this);}}