android应用换肤功能的实现
2016-05-16 14:27
1621 查看
最近公司项目需求要求实现换肤功能,我就一个小菜鸟一个,于是上网各种找资源看各种代码终于实现了
新建BaseActivity
1在atrrs定义定义背景和文字颜色属性
2在color中定义颜色属性如
3在Styles中定义不同皮肤的theme名称及样式如
在所有activity都要继承BaseActivity
在视图文件xml中也要设置背景(ndroid:background="?settingbackground")
创建修改Theme类SkinSettingManager
新建BaseActivity
public class BaseActivity extends Activity { private int themes; @Override protected void onCreate(Bundle savedInstanceState) { themes = new SkinSettingManager(this).getCurrentSkinRes(); this.setTheme(themes); super.onCreate(savedInstanceState); } }
1在atrrs定义定义背景和文字颜色属性
<resources> <attr name="mainbackground" format="reference|color"/> <attr name="settingbackground" format="reference|color"/> <attr name ="backg" format="reference|color"/> </resources>
2在color中定义颜色属性如
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="white">#ffffff</color> <color name="night">#000000</color> <color name="red">#fff000</color> <color name="yellow">#000fff</color> </resources>
3在Styles中定义不同皮肤的theme名称及样式如
<style name="normalTheme" parent="@android:style/Theme.Black.NoTitleBar"> <item name="mainbackground">@color/white</item> <item name="settingbackground">@color/white</item> <item name="android:textColor">@color/night</item> <item name="backg">@color/red</item> </style> <style name="nightTheme" parent="@android:style/Theme.Black.NoTitleBar"> <item name="mainbackground">@color/night</item> <item name="settingbackground">@color/night</item> <item name="android:textColor">@color/white</item> <item name="backg">@color/yellow</item> </style>
在所有activity都要继承BaseActivity
在视图文件xml中也要设置背景(ndroid:background="?settingbackground")
<RelativeLayout 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:background="?settingbackground" tools:context="com.example.administrator.myapplication.TwoActivity"> </RelativeLayout>
创建修改Theme类SkinSettingManager
/** * 改变Theme */ public class SkinSettingManager { private final static String SKIN_PREF = "skinSetting"; private SharedPreferences skinSettingPreference; private String key = "skin_type"; private SharedPreferences.Editor editor; private int[] skinResources = { R.style.normalTheme, R.style.nightTheme }; private Activity mActivity; public SkinSettingManager(Activity activity) { this.mActivity = activity; skinSettingPreference = mActivity.getSharedPreferences(SKIN_PREF, 0x0001); } /** * 获取当前程序的皮肤序号*/ public int getSkinType() { return skinSettingPreference.getInt(key, 0); } /** * 把皮肤序号写到全局设置里去 */ public void setSkinType(int j) { editor = skinSettingPreference.edit(); editor.putInt(key, j); editor.commit(); } /** * 获取当前皮肤的style * @return */ public int getCurrentSkinRes() { int getSkinLen = getSkinType(); return skinResources[getSkinLen]; } /** * 用于切换皮肤 */ public int toggleSkins() { int skinType = getSkinType(); if (skinType == 0) { skinType = 1; } else { skinType = 0; } setSkinType(skinType); return getCurrentSkinRes(); } }
下面就是实现的效果图了
相关文章推荐
- android SQLite数据库
- android切换buck构建项目
- android launcher 文件夹美化类似小米Launcher
- 安卓开发中Gallery控件的使用
- Java、Android中Math类中常用方法的简单介绍
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- Failed to find 'ANDROID_HOME' environment variable
- Android Button按钮点击背景和文字变化
- android 输入法弹出键盘把listview顶上去,保留顶部标题栏位置不动
- Android Studio添加assets文件夹
- LayoutParams继承于Android.View.ViewGroup.LayoutParams.
- Android Studio你不知道的调试技巧
- android 进入页面时让焦点固定在顶部
- android 开发奇葩问题
- Android 打开URL
- 解决Android输入法不隐藏的问题
- Android手势锁实现
- Android官方文档之Content Providers
- Android开机启动耗时较多的部分有3个,分别是preloadclasses和scan packages。//preload-resources
- Android基础之listview多种布局