如何进行只读(以编程方式填充)首选项?

时间:2011-12-29 17:47:34

标签: android

如何使用以编程方式填充的值(例如:版本,型号......)制作首选项?

4 个答案:

答案 0 :(得分:38)

为什么不直接使用android.preference.Preference?

<Preference 
 android:key="version"
 android:title="@string/version" />

没有编辑对话框,没有更多属性,只有信息!!

//Set the version string in your code 
findPreference("version").setSummary(version);

答案 1 :(得分:16)

我用以下内容完成了这个:

在我的application_preferences.xml中,我有以下偏好。这使它仍然是黑色(不是灰色),但仍然无法由用户编辑。将其变为灰色会使其难以阅读。

<EditTextPreference
    android:key="version"
    android:title="@string/version"
    android:enabled="false" 
    android:selectable="false"
    android:persistent="false"
    android:shouldDisableView="false"/>

在首选项活动onCreate方法中,获取版本首选项并将标题设置为应用程序版本。

EditTextPreference versionPref = (EditTextPreference)findPreference("version");
String version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
versionPref.setTitle(getString(R.string.version) + ": " + version);

答案 2 :(得分:3)

您可以在代码中设置首选项,并在填写代码之前检查它是否已填充。只要您不授予用户更改此信息的权限,他们所能做的就是“清除本地数据”,如果您正确执行此操作,将导致程序重新填充数据。

我使用这种技术来存储设备的唯一ID,登录的用户等等。用户甚至(并且绝不应该)知道我要跟踪的内容,他们只知道他们有一个平滑的程序做他们需要做的事。

示例:

SharedPreferences settings = context.getSharedPreferences("preferanceName", 0);
SharedPreferences.Editor editor = settings.edit();
int value = foo;
editor.putInt("ValueToStore", value);
editor.commit();

答案 3 :(得分:0)

Kevin Westwood非常感谢!!

在我的情况下,我只是将 setTitle 更改为 setSummary ,因此该值在标题后面可见。

    String serverUrl = "http://...";
    EditTextPreference pref = (EditTextPreference)findPreference("serverPrefKey");
    pref.setSummary(serverUrl);