使用共享首选项保存 android 主题
save android theme using shared preferences
您好,我正在尝试保存具有共享偏好的主题。当用户单击具有特定主题的按钮时,我希望将该主题设置为默认主题并保存,这样当他们重新打开应用程序时,它仍然是那个新主题。
主要Activity:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
Utils.changeToTheme(this, Utils.THEME_DEFAULT);
break;
case R.id.button2:
Utils.changeToTheme(this, Utils.THEME_WHITE);
break;
case R.id.button3:
Utils.changeToTheme(this, Utils.THEME_BLUE);
break;
}
}
}
实用程序:
public class Utils{
private static int sTheme;
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
/**
* Set the theme of the Activity, and restart it by creating a new Activity of the same type.
*/
public static void changeToTheme(Activity activity, int theme)
{
sTheme = theme;
activity.finish();
activity.startActivity(new Intent(activity, activity.getClass()));
}
/** Set the theme of the activity, according to the configuration.
* @param activity*/
public static void onActivityCreateSetTheme(MainActivity activity)
{
switch (sTheme)
{
default:
case THEME_DEFAULT:
activity.setTheme(R.style.AppTheme);
break;
case THEME_WHITE:
activity.setTheme(R.style.MyTheme);
break;
case THEME_BLUE:
activity.setTheme(R.style.My2Theme);
break;
我还希望为所有活动保存主题,而不仅仅是单击按钮的活动。谢谢
我提供了一个应该适合您的示例。有关详细信息,请参阅 http://developer.android.com/guide/topics/data/data-storage.html#pref。由于 PREFS_NAME 是 public 您可以调用 getSharedPreferences(MyActivity.PREFS_NAME,0);从其他活动访问相同的 SharedPreferences
您的字段 class
public static final String PREFS_NAME = "MyPrefsFile";
将此代码放在您要在 SharedPreferences 中保存主题选择的位置
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
//"theme" is the key sTheme is the value you're saving
editor.putInt("theme", sTheme);
editor.commit();
并将此代码放在您想要取回该值的位置
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
//"theme" is the same key 0 is the default value
int theme = settings.getInt("theme", 0);
在这里你可以找到关于SharedPreferences 的教程,基本上你应该存储所选主题的编号,当应用程序启动时,检查哪个存储在SharedPreferences中。检索值后,您可以 "store" 全局检查其他活动的主题编号(这样,您不必每次都检查 SharedPreferences,只需在应用程序启动时)。
更新 0
这里有一个 class 处理 SharedPreference 的东西:
public class SharedPreferencesManager {
/**
* SharedPreferences to store the settings. This way, they'll be available next time the user starts the app
*/
private SharedPreferences sPreferences;
/**
* Editor to make changes on sharedPreferences
*/
private SharedPreferences.Editor sEditor;
/**
* The class itself
*/
private Context context;
public SharedPreferencesManager(Context context){
this.context = context;
sPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
private SharedPreferences.Editor getEditor(){
return sPreferences.edit();
}
/**
* Store a boolean value in sharedPreferences
* @param tag identifies the value
* @param value the value itself
*/
public void storeBoolean(String tag, boolean value){
sEditor = getEditor();
sEditor.putBoolean(tag,value);
sEditor.commit();
}
/**
* Store a string in sharedPreferences
* @param tag identifies the value
* @param str the string itself
*/
public void storeString(String tag, String str){
sEditor = getEditor();
sEditor.putString(tag, str);
sEditor.commit();
}
/**
*
* @param tag identifies the value
* @param defValue default value
* @return the stored or default value
*/
public boolean retrieveBoolean(String tag, boolean defValue){
return sPreferences.getBoolean(tag,defValue);
}
/**
*
* @param tag identifies the string
* @param defStr default string
* @return the stored or default string
*/
public String retrieveString(String tag, String defStr){
return sPreferences.getString(tag, defStr);
}
/**
*
* @param tag identifies the value
* @param defValue default value
* @return the stored or default value
*/
public int retrieveInt(String tag, int defValue){
return sPreferences.getInt(tag, defValue);
}
/**
*
* @param tag identifies the value
* @param defValue the value itself
*/
public void storeInt(String tag, int defValue){
sEditor = getEditor();
sEditor.putInt(tag, defValue);
sEditor.commit();
}
//Incorrect Bracket Closing Removal.
使用此 class 您可以存储和检索不同类型的值 on/from SharedPreferences。在您的情况下,您需要存储主题的价值。你有:
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
因此,在用户选择主题后,您应该调用:
new SharedPreferencesManager(getApplicationContext()).storeInt("theme", THEME_WHITE);
您可以在 onClick()
处理程序上或您认为更好的地方调用此函数:)
要检索存储的主题值,请在 onCreate 方法中调用以下代码:
Utils.changeToTheme(this, new SharedPreferencesManager(this).retrieveInt("theme", THEME_WHITE));
请记住,当您要从 SharedPreferences 中检索值时,必须传递默认值,因此如果没有存储任何与标签 "theme" 相关的内容,它将 return 默认值价值。
我没有测试这段代码,也许你需要稍微调整一下。
在您的 Main Activity 中,对 onClick 进行以下更改:
@Override
public void onClick(View v)
{
//Setup the SharedPreferences
SharedPreferences mSettings = this.getSharedPreferences("Themes", 0);
//SharedPrerefences Editor (to add content to SP)
SharedPreferences.Editor editor = mSettings.edit();
switch (v.getId())
{
case R.id.button1:
Utils.changeToTheme(this, Utils.THEME_DEFAULT);
//Add the theme's int to SharedPreferences
editor.putInt("theme", Utils.THEME_TEAL);
//Apply the save
editor.apply();
break;
case R.id.button2:
Utils.changeToTheme(this, Utils.THEME_WHITE);
//Add the theme's int to SharedPreferences
editor.putInt("theme", Utils.THEME_TEAL);
//Apply the save
editor.apply();
break;
case R.id.button3:
Utils.changeToTheme(this, Utils.THEME_BLUE);
//Add the theme's int to SharedPreferences
editor.putInt("theme", Utils.THEME_TEAL);
//Apply the save
editor.apply();
break;
}
}
然后,在 onCreate 的顶部,在 super 和 setContentView 之前添加:
SharedPreferences mSettings = this.getSharedPreferences("Themes", 0);
Utils.SetTheme(mSettings.getInt("theme", 0));
我们在这里所做的是:
- 在 SharedPreferences 中打开并存储与主题相关的整数。
- 在你的onCreate中打开SharedPreferences,然后调用SetTheme来查找保存在SharedPreferences中的整数并将其应用于主题。
现在当你点击白色主题按钮时,它会应用它。
您好,我正在尝试保存具有共享偏好的主题。当用户单击具有特定主题的按钮时,我希望将该主题设置为默认主题并保存,这样当他们重新打开应用程序时,它仍然是那个新主题。
主要Activity:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
Utils.changeToTheme(this, Utils.THEME_DEFAULT);
break;
case R.id.button2:
Utils.changeToTheme(this, Utils.THEME_WHITE);
break;
case R.id.button3:
Utils.changeToTheme(this, Utils.THEME_BLUE);
break;
}
}
}
实用程序:
public class Utils{
private static int sTheme;
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
/**
* Set the theme of the Activity, and restart it by creating a new Activity of the same type.
*/
public static void changeToTheme(Activity activity, int theme)
{
sTheme = theme;
activity.finish();
activity.startActivity(new Intent(activity, activity.getClass()));
}
/** Set the theme of the activity, according to the configuration.
* @param activity*/
public static void onActivityCreateSetTheme(MainActivity activity)
{
switch (sTheme)
{
default:
case THEME_DEFAULT:
activity.setTheme(R.style.AppTheme);
break;
case THEME_WHITE:
activity.setTheme(R.style.MyTheme);
break;
case THEME_BLUE:
activity.setTheme(R.style.My2Theme);
break;
我还希望为所有活动保存主题,而不仅仅是单击按钮的活动。谢谢
我提供了一个应该适合您的示例。有关详细信息,请参阅 http://developer.android.com/guide/topics/data/data-storage.html#pref。由于 PREFS_NAME 是 public 您可以调用 getSharedPreferences(MyActivity.PREFS_NAME,0);从其他活动访问相同的 SharedPreferences
您的字段 class
public static final String PREFS_NAME = "MyPrefsFile";
将此代码放在您要在 SharedPreferences 中保存主题选择的位置
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
//"theme" is the key sTheme is the value you're saving
editor.putInt("theme", sTheme);
editor.commit();
并将此代码放在您想要取回该值的位置
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
//"theme" is the same key 0 is the default value
int theme = settings.getInt("theme", 0);
在这里你可以找到关于SharedPreferences 的教程,基本上你应该存储所选主题的编号,当应用程序启动时,检查哪个存储在SharedPreferences中。检索值后,您可以 "store" 全局检查其他活动的主题编号(这样,您不必每次都检查 SharedPreferences,只需在应用程序启动时)。
更新 0
这里有一个 class 处理 SharedPreference 的东西:
public class SharedPreferencesManager {
/**
* SharedPreferences to store the settings. This way, they'll be available next time the user starts the app
*/
private SharedPreferences sPreferences;
/**
* Editor to make changes on sharedPreferences
*/
private SharedPreferences.Editor sEditor;
/**
* The class itself
*/
private Context context;
public SharedPreferencesManager(Context context){
this.context = context;
sPreferences = PreferenceManager.getDefaultSharedPreferences(context);
}
private SharedPreferences.Editor getEditor(){
return sPreferences.edit();
}
/**
* Store a boolean value in sharedPreferences
* @param tag identifies the value
* @param value the value itself
*/
public void storeBoolean(String tag, boolean value){
sEditor = getEditor();
sEditor.putBoolean(tag,value);
sEditor.commit();
}
/**
* Store a string in sharedPreferences
* @param tag identifies the value
* @param str the string itself
*/
public void storeString(String tag, String str){
sEditor = getEditor();
sEditor.putString(tag, str);
sEditor.commit();
}
/**
*
* @param tag identifies the value
* @param defValue default value
* @return the stored or default value
*/
public boolean retrieveBoolean(String tag, boolean defValue){
return sPreferences.getBoolean(tag,defValue);
}
/**
*
* @param tag identifies the string
* @param defStr default string
* @return the stored or default string
*/
public String retrieveString(String tag, String defStr){
return sPreferences.getString(tag, defStr);
}
/**
*
* @param tag identifies the value
* @param defValue default value
* @return the stored or default value
*/
public int retrieveInt(String tag, int defValue){
return sPreferences.getInt(tag, defValue);
}
/**
*
* @param tag identifies the value
* @param defValue the value itself
*/
public void storeInt(String tag, int defValue){
sEditor = getEditor();
sEditor.putInt(tag, defValue);
sEditor.commit();
}
//Incorrect Bracket Closing Removal.
使用此 class 您可以存储和检索不同类型的值 on/from SharedPreferences。在您的情况下,您需要存储主题的价值。你有:
public final static int THEME_DEFAULT = 0;
public final static int THEME_WHITE = 1;
public final static int THEME_BLUE = 2;
因此,在用户选择主题后,您应该调用:
new SharedPreferencesManager(getApplicationContext()).storeInt("theme", THEME_WHITE);
您可以在 onClick()
处理程序上或您认为更好的地方调用此函数:)
要检索存储的主题值,请在 onCreate 方法中调用以下代码:
Utils.changeToTheme(this, new SharedPreferencesManager(this).retrieveInt("theme", THEME_WHITE));
请记住,当您要从 SharedPreferences 中检索值时,必须传递默认值,因此如果没有存储任何与标签 "theme" 相关的内容,它将 return 默认值价值。
我没有测试这段代码,也许你需要稍微调整一下。
在您的 Main Activity 中,对 onClick 进行以下更改:
@Override
public void onClick(View v)
{
//Setup the SharedPreferences
SharedPreferences mSettings = this.getSharedPreferences("Themes", 0);
//SharedPrerefences Editor (to add content to SP)
SharedPreferences.Editor editor = mSettings.edit();
switch (v.getId())
{
case R.id.button1:
Utils.changeToTheme(this, Utils.THEME_DEFAULT);
//Add the theme's int to SharedPreferences
editor.putInt("theme", Utils.THEME_TEAL);
//Apply the save
editor.apply();
break;
case R.id.button2:
Utils.changeToTheme(this, Utils.THEME_WHITE);
//Add the theme's int to SharedPreferences
editor.putInt("theme", Utils.THEME_TEAL);
//Apply the save
editor.apply();
break;
case R.id.button3:
Utils.changeToTheme(this, Utils.THEME_BLUE);
//Add the theme's int to SharedPreferences
editor.putInt("theme", Utils.THEME_TEAL);
//Apply the save
editor.apply();
break;
}
}
然后,在 onCreate 的顶部,在 super 和 setContentView 之前添加:
SharedPreferences mSettings = this.getSharedPreferences("Themes", 0);
Utils.SetTheme(mSettings.getInt("theme", 0));
我们在这里所做的是:
- 在 SharedPreferences 中打开并存储与主题相关的整数。
- 在你的onCreate中打开SharedPreferences,然后调用SetTheme来查找保存在SharedPreferences中的整数并将其应用于主题。
现在当你点击白色主题按钮时,它会应用它。