1. ホーム
  2. android

[解決済み] TextViewのリンクから下線を消す - Android

2022-12-03 05:49:37

質問

私は、2つの textview を使ってデータベースからのリンクを表示していますが、リンクの色を変更することはできましたが、アンダーラインを削除したいのです。

email.setText(c.getString(5));
    website.setText(c.getString(6));
    Linkify.addLinks(email, Linkify.ALL);
    Linkify.addLinks(website, Linkify.ALL);

XMLやコードからできるのでしょうか?

どのように解決するのですか?

コード内で URLSpan のインスタンスを見つけて、下線を引かないバージョンに置き換えることです。を呼び出した後 Linkify.addLinks() を呼び出した後、関数 stripUnderlines() に貼り付ける。 TextView s:

    private void stripUnderlines(TextView textView) {
        Spannable s = new SpannableString(textView.getText());
        URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
        for (URLSpan span: spans) {
            int start = s.getSpanStart(span);
            int end = s.getSpanEnd(span);
            s.removeSpan(span);
            span = new URLSpanNoUnderline(span.getURL());
            s.setSpan(span, start, end, 0);
        }
        textView.setText(s);
    }

これは、TextPaintの"underline"プロパティを有効にしない、URLSpanのカスタマイズされたバージョンを必要とします。

    private class URLSpanNoUnderline extends URLSpan {
        public URLSpanNoUnderline(String url) {
            super(url);
        }
        @Override public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setUnderlineText(false);
        }
    }