1) 我在res/xml/preferences.xml中定义了用户偏好设置,以便用户可以使用PreferenceActivity管理他们的偏好设置。
2) 我想为我的应用程序定义另一个文件,用于全局配置偏好设置。
最好的方法是如何管理我的应用程序配置偏好设置?我应该创建另一个XML文件来存储配置值,还是应该在strings.xml中指定这些配置值?管理配置偏好设置的最佳实践是什么?
设置偏好文件并没有保存在项目的 /res/xml/defaults.xml
文件中。
它们存储在设备上你的应用程序文件夹中,类似于:
/data/data/com.your.pkg/default.prefs
尽量不要指定文件名,因为您将在首选项文件上遇到一些问题,就像此 OP 在此问题中所遇到的那样:如何使Android中的首选项工作?
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
preferences.getString('weightPref', null);
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
是偏好设置的操作模式。它是默认模式,意味着创建的文件只能被调用应用程序访问。还支持其他两种模式:MODE_WORLD_READABLE
和MODE_WORLD_WRITEABLE
。在MODE_WORLD_READABLE
中,其他应用程序可以读取创建的文件,但不能修改它。在MODE_WORLD_WRITEABLE
的情况下,其他应用程序也可以对创建的文件进行写入操作。
(2) 推荐的方法是使用默认模式,不指定文件名。
SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context);
最后,一旦您获得了偏好实例,以下是如何从偏好中检索存储的值:
int storedPreference = preferences.getInt("storedInt", 0);
要在偏好文件中存储值,必须使用SharedPreference.Editor
对象。 Editor
是SharedPreference
类的嵌套接口。
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
编辑器还支持remove()
和clear()
等方法,用于从文件中删除首选项值。
活动首选项:
共享首选项可以被其他应用程序组件使用。但是,如果您不需要与其他组件共享首选项,并且希望拥有活动的私有首选项,则可以使用活动的getPreferences()
方法来实现。 getPreference
方法使用活动类的名称作为首选项文件名,调用getSharedPreferences()
方法。
以下是获取首选项的代码:
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
存储值的代码与共享首选项相同。
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
您还可以使用其他方法,例如将活动状态存储在数据库中。请注意,Android还包含一个名为android.preference
的包。该包定义了实现应用程序首选项UI的类。
要查看更多示例,请查看Android开发者网站上有关数据存储的文章。
假设您的XML文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:key="gpsOn"
android:summaryOff="GPS is Off"
android:summaryOn="GPS is On"
android:title="GPS State"></CheckBoxPreference>
我假设您使用PreferenceActivity
从xml中加载首选项。因此,在您的活动中,您可以执行addPreferencesFromResource(R.xml.application_pref);
这样做时,默认情况下,所有值都存储在应用程序的默认SharedPreference中。您可以在任何地方访问这些首选项。因此,从其他活动/服务中只需执行:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean value = prefs.getBoolean("gpsOn", false);
就像这样,您应该在value
中获取用户的偏好。
为应用程序设置全局配置首选方式可能是在Android清单中定义元数据元素