我的 android 应用程序有两种偏好:
1) 我在 res/xml/preferences.xml 中定义了用户首选项,以便用户可以使用 PreferenceActivity 管理他们的首选项。
2) 我想为我的应用程序的全局配置首选项定义另一个文件。
管理我的应用配置偏好的最佳方式是什么?我应该使用配置值创建另一个 XML 文件,还是应该在 strings.xml 中指定这些配置值?管理配置首选项的最佳做法是什么?
我的 android 应用程序有两种偏好:
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);
许多应用程序可以提供一种方法来捕获用户对特定应用程序或活动设置的偏好。为了支持这一点,Android 提供了一组简单的 API。
首选项通常是名称值对。它们可以在应用程序中的各种活动中存储为“共享首选项”(注意目前它不能跨进程共享)。或者它可能是需要存储特定于活动的东西。
共享首选项:共享首选项可由应用程序之外的所有组件(活动、服务等)使用。
活动处理的首选项:这些首选项只能在活动中使用,不能被应用程序的其他组件使用。
共享偏好:
getSharedPreferences
共享首选项在类的方法的帮助下进行管理Context
。首选项存储在默认文件 (1) 中,或者您可以指定用于引用首选项的文件名 (2)。
(1) 这里是指定文件名时如何获取实例
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>
我假设您使用 aPreferenceActivity
从您的 xml 加载首选项。所以在你的活动中你做addPreferencesFromResource(R.xml.application_pref);
执行此操作时,默认情况下,所有值都存储在应用程序的默认 SharedPreference 中。您可以在任何您想要的地方访问这些首选项。因此,从其他一些活动/服务中只需执行以下操作:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean value = prefs.getBoolean("gpsOn", false);
就像这样,您应该在value
.
为应用设置全局配置首选项的最佳方式可能是在 Android Manifest 中定义元数据元素