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

er0*_*0ck 7 java string android android-preferences dialog-preference

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

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

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

android:summary="@string/pref_list_camera_summary"
Run Code Online (Sandbox Code Playgroud)

解析为:

<string name="pref_list_camera_summary">Use camera: %s</string>
Run Code Online (Sandbox Code Playgroud)

在我的timePreference%s不会扩展.我已经四处搜索,我无法弄清楚如何获得dialogPreference/timePreference来做到这一点.我可以在onSetInitalValue()中手动设置摘要,如下所示:

setSummary(getSummary() + " " + DateFormat.getTimeFormat(getContext()).format(new Date(calendar.getTimeInMillis())));
Run Code Online (Sandbox Code Playgroud)

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

我将开始挖掘listPreference代码,看看我如何将它添加到dialogPreference.任何想法/先发制人都会很棒!

谢谢!

ami*_*phy 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));
Run Code Online (Sandbox Code Playgroud)

  • 如果要在首选项活动/片段中初始化摘要,通常的做法是在 onResume 方法中进行。另一种方法是在自定义首选项类的“onBindViewHolder”中执行初始化任务。在那里调用`getSummary()` 方法是可行的。 (2认同)