您的位置:首页 > 移动开发 > Android开发

android应用换肤功能的实现

2016-05-16 14:27 1621 查看
最近公司项目需求要求实现换肤功能,我就一个小菜鸟一个,于是上网各种找资源看各种代码终于实现了

新建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();
}
}

下面就是实现的效果图了




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: