当前位置:   article > 正文

使用开源框架——AndroidChangeSkin,实现app换肤

android changeskin

AndroidChangeSkin鸿洋开源的一个换肤框架,喜欢的可以去Star下。

简介

AndroidChangeSkin是一种完全无侵入的换肤方式,支持插件式和应用内,无需重启Activity。

使用换肤效果图

默认:

换肤:

配置环境:

1、在app下的build.gradle添加compile 'com.zhy:changeskin:4.0.2'依赖即可。

2、或者下载changeskin,作为module依赖至主项目,例如:

  1. dependencies { compile project(':changeskin') }
  2. 复制代码

使用:

1、在Application初始化

  1. public class MyApplication extends Application
  2. {
  3. private static Context mContext;
  4. @Override
  5. public void onCreate()
  6. {
  7. super.onCreate();
  8. mContext = getApplicationContext();
  9. SkinManager.getInstance().init(this);
  10. }
  11. public static Context getContext()
  12. {
  13. return mContext;
  14. }
  15. }
  16. 复制代码

2、在attrs.xml定义资源:

  1. <!-- changeskin 默认 -->
  2. <color name="menu_item_text_color">#ffffffff</color>
  3. <color name="item_text_color">#ff000000</color>
  4. <color name="main_bg">#fffffffe</color>
  5. <!--应用内换肤资源-->
  6. <color name="item_text_color_red">#ff0000</color>
  7. <color name="menu_item_text_color_red">#ff0000</color>
  8. <color name="main_bg_red">#ff0000</color>
  9. <color name="item_text_color_yellow">#E8BF6A</color>
  10. <color name="menu_item_text_color_yellow">#E8BF6A</color>
  11. <color name="main_bg_yellow">#E8BF6A</color>
  12. <color name="item_text_color_green">#00ff00</color>
  13. <color name="menu_item_text_color_green">#00ff00</color>
  14. <color name="main_bg_green">#00ff00</color>
  15. 复制代码

3、activity_main.xml使用时添加 android:tag

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. android:tag="skin:main_bg:background"
  10. tools:context="com.lwj.mytestpro.MainActivity">
  11. <!--android:tag="skin:main_bg:background"-->
  12. <ScrollView
  13. android:layout_width="match_parent"
  14. android:layout_height="match_parent">
  15. <LinearLayout
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent"
  18. android:orientation="vertical">
  19. <Button
  20. android:id="@+id/button13"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:tag="skin:item_text_color:textColor"
  24. android:text="换肤"/>
  25. <Button
  26. android:id="@+id/button14"
  27. android:layout_width="match_parent"
  28. android:layout_height="wrap_content"
  29. android:tag="skin:item_text_color:textColor"
  30. android:text="恢复默认肤色"/>
  31. </LinearLayout>
  32. </ScrollView>
  33. </RelativeLayout>
  34. 复制代码

GitHub中该项目对tag的使用介绍如下:

  1. tag属性分为3部分组成:
  2. skin
  3. 资源的名称,即插件包中资源的名称,需要与当前app内使用的资源名称一致。
  4. 支持的属性,目前支持src,background,textColor,支持扩展。
  5. 3部分,必须以:分隔拼接。
  6. 对于一个View多个属性需要换肤的,android:tag="skin:item_text_color:textColor|skin:icon:src" 同样使用|进行分隔。
  7. 简言之:如果你哪个View需要换肤,就添加tag属性,tag值按照上述方式设置即可。
  8. 复制代码

4、应用内换肤

MainActivity:

  1. public class MainActivity extends AppCompatActivity
  2. {
  3. private Button skin;
  4. private Button defultSkin;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState)
  7. {
  8. super.onCreate(savedInstanceState);
  9. SkinManager.getInstance().register(this);
  10. setContentView(R.layout.activity_main);
  11. Utils.init(this);
  12. initView();
  13. }
  14. private void initView()
  15. {
  16. //换肤
  17. skin = (Button)this.findViewById(R.id.button13);
  18. skin.setOnClickListener(mOnClickListener);
  19. defultSkin = (Button)this.findViewById(R.id.button14);
  20. defultSkin.setOnClickListener(mOnClickListener);
  21. }
  22. private View.OnClickListener mOnClickListener = new View.OnClickListener()
  23. {
  24. @Override
  25. public void onClick(View view)
  26. {
  27. switch(view.getId()){
  28. case R.id.button13:
  29. SkinManager.getInstance().changeSkin("yellow");
  30. break;
  31. case R.id.button14:
  32. SkinManager.getInstance().removeAnySkin();
  33. break;
  34. default:
  35. break;
  36. }
  37. }
  38. };
  39. @Override
  40. protected void onDestroy()
  41. {
  42. Toast.makeText(this, "MainActivity.onDestroy", Toast.LENGTH_SHORT).show();
  43. SkinManager.getInstance().unregister(this);
  44. super.onDestroy();
  45. }
  46. }
  47. 复制代码

首先要在onCreate调用register注册,在onDestroy调用unregister解注册。使用SkinManager.getInstance().changeSkin("yellow")即可完成换肤。

注意:这里的changeSkin传入的是字符串yellow,跟我在attrs.xml文件定义属性名字的后缀一致。

  1. <color name="menu_item_text_color">#ffffffff</color>
  2. <color name="item_text_color">#ff000000</color>
  3. <color name="main_bg">#fffffffe</color>
  4. <color name="item_text_color_yellow">#E8BF6A</color>
  5. <color name="menu_item_text_color_yellow">#E8BF6A</color>
  6. <color name="main_bg_yellow">#E8BF6A</color>
  7. 复制代码

关于AndroidChangeSkin的使用,还可以参考这篇文章Android 夜间模式changeskin小结,这篇文章的好处是:对踩过的坑总结得不错。

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

闽ICP备14008679号