第一个问题。很长一段时间的搜索者。
我通过扩展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中。任何想法/先发制人都会很棒!
谢谢!
答案 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
的摘要。