这一定经常发生。
当用户在android应用程序中编辑首选项时,我希望他们能够在应用程序中看到当前设置的首选项值 Preference
总结。
示例:如果我有“丢弃旧邮件”的首选项设置,该设置指定需要清理邮件的天数。在 PreferenceActivity
我希望用户看到:
“丢弃旧邮件”<-标题
“x天后清理邮件”<-摘要,其中x是当前首选项值
额外积分:使其可重用,这样我就可以轻松地将其应用于我所有的首选项,而不管它们的类型如何(这样它就可以用最少的编码处理edittextpreference、listpreference等)。
30条答案
按热度按时间nhn9ugyo16#
谢谢你的详细解释!
如果这对任何人都有帮助的话,我必须修改reto meier提出的代码,使其与android 1.5的sdk一起工作
同样的更改也适用于回调函数
onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
干杯克里斯
ql3eal8s17#
如果适合您的需要,可以通过多种方法使其成为更通用的解决方案。
例如,如果您想让所有列表首选项都以摘要的形式显示其选择,您可以将其用于您的
onSharedPreferenceChanged
实施:这很容易扩展到其他首选项类。
通过使用
getPreferenceCount
及getPreference
功能性PreferenceScreen
及PreferenceCategory
,您可以很容易地编写一个通用函数来遍历首选项树,设置您想要的类型的所有首选项的摘要toString
代表pkbketx918#
谢谢你的提示!
我有一个首选项屏幕,希望将每个列表首选项的值显示为摘要。
这就是我现在的方式:
这对我来说是可行的,但我想知道什么是最好的解决方案(性能、稳定性、可伸缩性):koem正在展示的还是这个?
cpjpxq1n19#
根据android文档,您可以使用
app:useSimpleSummaryProvider="true"
在listpreference和edittextpreference组件中。jc3wubiy20#
如果有人仍然在寻找这个问题的答案,你应该查看一下thirtythreefortys的答案。
android将用listpreference的选择器显示的首选项的当前字符串值替换%s。
mqxuamgl21#
实际上,checkboxpreference确实能够基于复选框值指定不同的摘要。请参阅android:summaryoff和android:summaryon属性(以及相应的checkboxpreference方法)。
0h4hbjxa22#
对于edittextpreference:
yzxexxkh23#
这是将摘要设置为所选值所需的代码。它还可以在启动时设置值,并尊重默认值,而不仅仅是在更改时。只需将“r.layout.prefs”更改为xml文件,并根据需要扩展setsummary方法。它实际上只处理listpreferences,但很容易进行自定义以尊重其他首选项。
科姆
r6vfmomb24#
可能与listpreference类似:修改getsummary以获得所需内容:
并在xml中使用:
因此,您可以用
%s
而不是实际值。bhmjp9jg25#
在花了几个小时来解决此类问题后,我实现了以下代码:
[更新:最终版本清单]
这是唯一对我有效的解决办法。在我尝试从listpreferences中创建子类并实现android之前:summary=“bla-bla-bla%s”。两者都不起作用。
lrl1mhuk26#
可以替代默认首选项类并实现该功能。
稍后在xml中,您可以使用自定义首选项,如
k4ymrczo27#
我的选择是扩展listpreference,它是干净的:
然后添加到settings.xml中:
mctunoxg28#
如果你使用
PreferenceFragment
,我就是这样解决的。这是不言自明的。oyxsuwqo29#
android文档称,用户可以在应用程序中使用字符串格式标记
getSummary()
:如果摘要中有字符串格式标记(即“%s”或“%1$s”),则将替换当前条目值。
简单指定
android:summary="Clean up messages after %s days"
在listpreference中,xml声明对我有效。注意:这只适用于
ListPreference
.rqenqsqc30#
这是我的解决方案。。。不管好坏