Android:在DialogPreference摘要中支持%s扩展

时间:2014-03-15 16:20:09

标签: java android string android-preferences dialog-preference

第一个问题。很长一段时间的搜索者。

我通过扩展DialogPreference实现了timePicker首选项,就像在android文档中一样。一切正常,我可以通过onSharedPreferenceChanged()以及DialogPreference onSetInitialValue()的覆盖来设置摘要。

我的目标是始终使用 显示其值以及来自资源的其他字符串。 例如,在我的ListPreference中,我有:

android:summary="@string/pref_list_camera_summary"

解析为:

<string name="pref_list_camera_summary">Use camera: %s</string>

在我的timePreference%s中没有扩展。我已经四处搜索,我无法弄清楚如何让dialogPreference / timePreference这样做。 我可以在onSetInitalValue()中手动设置摘要,如下所示:

setSummary(getSummary() + " " + DateFormat.getTimeFormat(getContext()).format(new Date(calendar.getTimeInMillis())));

我只是不喜欢这样的暗示扩张。感觉不干净或使用android%s范例。

我将开始挖掘listPreference代码并查看如何将其添加到dialogPreference中。任何想法/先发制人都会很棒!

谢谢!

2 个答案:

答案 0 :(得分:4)

如果您想用%s中定义的android:summary自动替换首选字符串,我认为没有这种可能性。您应该在初始化您的首选项时以编程方式处理它。您是否尝试过使用String.format()来避免+的串联?

String date = DateFormat.getTimeFormat(getContext())
        .format(new Date(calendar.getTimeInMillis()));

setSummary(String.format(Locale.getDefault(), 
        getContext().getString(R.string.pref_list_camera_summary), date));

答案 1 :(得分:3)

如果您使用库Material Preference,则可以轻松实现:

listPreference.summaryFormatter = { entry, value -> "Value for $entry is $value" }

这会将您的ListPreference的摘要设置为每周价值为7

我知道这个答案与您的问题没有太大关系。但是至少,您已经找到了可以做到的库。使用“材料偏好设置”,您不必将%s设置为ListPreference的摘要。