当前位置:   article > 正文

Android:换肤框架Android-Skin-Support_android android-skin-support

android android-skin-support

gihub地址:https://github.com/ximsfei/Android-skin-support

样例:

默认:

更换后:

一、引入依赖:

  1. // -- 换肤依赖
  2. implementation 'skin.support:skin-support:4.0.5'// skin-support
  3. implementation 'skin.support:skin-support-appcompat:4.0.5'// skin-support 基础控件支持
  4. implementation 'skin.support:skin-support-design:4.0.5'// skin-support-design material design 控件支持[可选]
  5. implementation 'skin.support:skin-support-cardview:4.0.5'// skin-support-cardview CardView 控件支持[可选]
  6. implementation 'skin.support:skin-support-constraint-layout:4.0.5'// skin-support-constraint-layout ConstraintLayout 控件支持[可选]

二、创建MyApplication:

  1. public class Myapplication extends Application {
  2. @Override
  3. public void onCreate() {
  4. super.onCreate();
  5. SkinCompatManager.withoutActivity(this)
  6. .addInflater(new SkinAppCompatViewInflater()) // 基础控件换肤初始化
  7. .addInflater(new SkinMaterialViewInflater()) // material design 控件换肤初始化[可选]
  8. .addInflater(new SkinConstraintViewInflater()) // ConstraintLayout 控件换肤初始化[可选]
  9. .addInflater(new SkinCardViewInflater()) // CardView v7 控件换肤初始化[可选]
  10. .setSkinStatusBarColorEnable(false) // 关闭状态栏换肤,默认打开[可选]
  11. .setSkinWindowBackgroundEnable(false) // 关闭windowBackground换肤,默认打开[可选]
  12. .loadSkin();
  13. }
  14. }

AndroidManifest.xml配置MyApplication.java:

三、创建需要换肤的资源

 

(1)选中main -> 右键New->Directory 创建res-后缀名

 (2)res-后缀名资源文件下创建对应的drawable、values等资源文件,如下图所示

以res-red资源为例:

shape_my_info_bg_red.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <gradient
  4. android:angle="90"
  5. android:endColor="#E91E63"
  6. android:startColor="#70E91E63" />
  7. </shape>

 colors.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <color name="skin_topbar_text_color_red">#860F08</color>
  4. <color name="skin_button_color_red">#CA493F</color>
  5. </resources>

四、初始布局使用默认res文件下资源

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. android:background="@drawable/shape_my_info_bg"
  8. tools:context=".MainActivity">
  9. <!--标题-->
  10. <TextView
  11. android:id="@+id/topBarTv"
  12. android:layout_width="match_parent"
  13. android:layout_height="60dp"
  14. android:gravity="center"
  15. android:textStyle="bold"
  16. android:textSize="20sp"
  17. android:text="标题信息"
  18. android:textColor="@color/skin_topbar_text_color"/>
  19. <Button
  20. android:id="@+id/changeBtn"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:layout_margin="20dp"
  24. android:background="@drawable/shape_my_info_bg"
  25. android:textStyle="bold"
  26. android:textColor="@color/skin_button_color"
  27. android:text="一键换肤(默认颜色)"/>
  28. <Button
  29. android:id="@+id/changeRedBtn"
  30. android:layout_width="match_parent"
  31. android:layout_height="wrap_content"
  32. android:layout_margin="20dp"
  33. android:background="@drawable/shape_my_info_bg"
  34. android:textStyle="bold"
  35. android:textColor="@color/skin_button_color"
  36. android:text="一键换肤(红色)"/>
  37. <Button
  38. android:id="@+id/changeYellowBtn"
  39. android:layout_width="match_parent"
  40. android:layout_height="wrap_content"
  41. android:layout_margin="20dp"
  42. android:background="@drawable/shape_my_info_bg"
  43. android:textStyle="bold"
  44. android:textColor="@color/skin_button_color"
  45. android:text="一键换肤(黄色)"/>
  46. </LinearLayout>

五、使用

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. // 换肤按钮
  3. // 默认皮肤
  4. private Button changeBtn;
  5. // 红色皮肤
  6. private Button changeRedBtn;
  7. // 黄色皮肤
  8. private Button changeYellowBtn;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. initControls();
  14. }
  15. // 控件初始化
  16. private void initControls(){
  17. // 默认颜色
  18. changeBtn = findViewById(R.id.changeBtn);
  19. changeBtn.setOnClickListener(this);
  20. // 红色
  21. changeRedBtn = findViewById(R.id.changeRedBtn);
  22. changeRedBtn.setOnClickListener(this);
  23. // 黄色
  24. changeYellowBtn = findViewById(R.id.changeYellowBtn);
  25. changeYellowBtn.setOnClickListener(this);
  26. }
  27. /**
  28. * 点击事件
  29. * */
  30. @Override
  31. public void onClick(View v) {
  32. switch (v.getId()){
  33. case R.id.changeBtn:// 默认颜色
  34. // 恢复默认皮肤
  35. SkinCompatManager.getInstance().restoreDefaultTheme();
  36. break;
  37. case R.id.changeRedBtn:// 红色
  38. // 前缀加载
  39. //SkinCompatManager.getInstance().loadSkin("light", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN);
  40. // 后缀加载
  41. SkinCompatManager.getInstance().loadSkin("red", null,SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);
  42. break;
  43. case R.id.changeYellowBtn:// 黄色
  44. // 前缀加载
  45. //SkinCompatManager.getInstance().loadSkin("light", SkinCompatManager.SKIN_LOADER_STRATEGY_PREFIX_BUILD_IN);
  46. // 后缀加载
  47. SkinCompatManager.getInstance().loadSkin("yellow", null,SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN);
  48. break;
  49. }
  50. }
  51. /**
  52. * 如果项目中使用的Activity继承自AppCompatActivity,需要重载getDelegate()方法
  53. * */
  54. @NonNull
  55. @Override
  56. public AppCompatDelegate getDelegate() {
  57. return SkinAppCompatDelegateImpl.get(this, this);
  58. }
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/86883
推荐阅读
相关标签
  

闽ICP备14008679号