簡體   English   中英

如何使用按鈕單擊刪除 UnderlineSpan() 文本

[英]How to remove UnderlineSpan() text using button click

我正在通過創建一個小型記事本項目來嘗試。 現在我很難找到刪除文本下划線的解決方案。 我可以設置它,但我不能刪除它。

這是我的代碼:

這是我如何設置它

我使用 span 來獲取選定的文本

selectedString.setSpan(UnderlineSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

這是我試圖取消它的方法

selectedString.setSpan(UnderlineSpan().updateDrawState(TextPaint().apply { isUnderlineText = false }), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

我試圖尋找解決方案,但沒有運氣有人可以幫助我嗎? 提前致謝!

你可以像這樣聲明一個類

class NoUnderlineSpan : UnderlineSpan() {
    override fun updateDrawState(ds: TextPaint) {
        ds.color = ds.linkColor
        ds.isUnderlineText = false
    }
}

然后像使用 UnderlineSpan 一樣使用 NoUnderlineSpan

或者你可以試試我寫的這個lib: SpannableStringDslExtension

如果你想刪除text的所有樣式,你可以在spannable上使用toString() ,它會刪除所有內容。

如果您只是想刪除spannable的一部分的樣式,只需創建一個UnderlineSpananonymous objectoverrideupdateDrawState方法

val underlineRemoveSpan = object : UnderlineSpan() {
    override fun updateDrawState(ds: TextPaint) {
        ds.isUnderlineText = false
    }
}

selectedString.setSpan(underlineRemoveSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

selectedString.setSpan(UnderlineSpan().updateDrawState(TextPaint().apply { isUnderlineText = false }), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

這不起作用,因為在將isUnderlineText設置為false之后使用新的TextPaint調用updateDrawState UnderlineSpan類中updateDrawState的實現將其設置為true ,這就是下划線不刪除的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM