7

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

我通过扩展 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。任何想法/先机都会很棒!

谢谢!

4

2 回答 2

5

如果你想用自动%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));
于 2018-12-28T13:35:12.873 回答
3

如果您使用库Material Preference,您可以轻松完成:

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

它会将您ListPreference的摘要设置为类似于Value for Weekly is 7

我知道这个答案与您的问题没有太大关系。但至少,你已经找到了一个可以做到这一点的库。使用 Material Preference,您不必设置%sListPreference's summary。

于 2018-12-30T20:54:48.813 回答