Android ListPreference摘要中的斜体文本

问题描述 投票:2回答:1

我正在创建一个具有几个EditTextPreferenceListPreference属性的首选项屏幕。我没有设置首选项时,我试图让摘要文本显示“未设置”。使用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的错误?

谢谢。

android preferences listpreference edittextpreference
1个回答
0
投票
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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.