我正在创建一个具有几个EditTextPreference
和ListPreference
属性的首选项屏幕。我没有设置首选项时,我试图让摘要文本显示“未设置”。使用etp.setSummary(Html.fromHtml("<i> not set </i>")
适用于EditTextPreference
属性,但lp.setSummary(Html.fromHtml("<i> not set </i>")
不适用于ListPreference
属性。显示“未设置”文本,但不显示斜体。
我已尝试使用以下内容格式化摘要:
ListPreference lp = (ListPreference)findPreference("def_list_pref");
SpannableString str = SpannableString.valueOf("not set");
str.setSpan(new StyleSpan(Typeface.ITALIC), 0, str.length(), 0);
lp.setSummary(str);
我也尝试手动将preference.xml中的listPreference属性的摘要设置为android:summary="<i> not set </i>"
,但这也不起作用。
有没有人知道我可能做错了什么,或者这是ListPreference
的错误?
谢谢。
public class SpannedSummaryListPreference extends ListPreference {
private CharSequence mCharSequenceSummary;
public SpannedSummaryListPreference(Context context) {
this(context,null);
}
public SpannedSummaryListPreference(final Context context, final AttributeSet attrs) {
super(context,attrs);
mCharSequenceSummary = getSummary();
}
@Override
public CharSequence getSummary() {
final CharSequence entry = getEntry();
if (super.getSummary() == null || entry == null) {
return super.getSummary();
} else {
if (mCharSequenceSummary instanceof String) {
return super.getSummary();
} else {
return mCharSequenceSummary;
}
}
}
@Override
public void setSummary(CharSequence summary) {
super.setSummary(summary);
mCharSequenceSummary = summary;
}
}`
编辑:Kotlin解决方案:
class ListPreferenceEx @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : ListPreference(context, attrs) {
private var mCharSequenceSummary: CharSequence? = null
init {
mCharSequenceSummary = summary
}
override fun getSummary(): CharSequence? {
val entry = entry
val superSummary = super.getSummary()
return if (superSummary == null || entry == null || mCharSequenceSummary is String)
superSummary
else
mCharSequenceSummary
}
override fun setSummary(summary: CharSequence) {
super.setSummary(summary)
mCharSequenceSummary = summary
}
}