【问题标题】:How to Remove Underline from hyperlink's text in android ?如何从android中的超链接文本中删除下划线?
【发布时间】:2012-01-16 21:59:57
【问题描述】:

我有 Button 及其文本,我从 string.xml 中检索它,即 我已经在 strings.xml 中的 res/values 中声明了一个按钮文本,例如

<string name="Google"><a href=""http://www.google.com\">Google</a></string>

我将其文本颜色从蓝色变为白色,但如何删除其下划线? 在我的 .java 文件中,我只使用setMovementMethod(LinkMovementMethod.getInstance()); 来制作链接可点击...我没有使用Linkify、webview 或类似form.Html 的任何东西... 一切正常。我只想删除“Google”文本下方的下划线... 有没有办法在xml中做到这一点?

我什至用过android:autoLink="all"。但是当我使用它时,文本和按钮颜色会发生变化,我不想要那个。

请帮忙。

【问题讨论】:

  • 这里有一个很棒的答案:stackoverflow.com/questions/4096851/…
  • 是的,在发布问题之前,我检查了那个答案,但我在这里已经提到我没有使用 Linkify 或除了 setMovementMethod(LinkMovementMethod.getInstance()) 之外的任何其他东西;不过还是谢谢。
  • 感谢编辑。-@pablisco

标签: android


【解决方案1】:

您将style=\"text-decoration:none\" 添加到您的&lt;a&gt; 标记中。

有关如何格式化字符串资源的更多信息,请查看String Resources Documentation

【讨论】:

  • 谢谢!但我做到了,但它不起作用..下划线仍然在文本下方。
  • 请发布完整的&lt;string&gt; 标签,以及我提到的修改。
  • 这是我的字符串标签 google.com\">Google
  • 试试这个:&lt;string name="Google"&gt;"&lt;a style='text-decoration:none' href='google.com'&gt;Google&lt;/a&gt;"&lt;/string&gt;.
  • 对不起先生,我试过了,但它不起作用..下划线仍然在文本下方。
【解决方案2】:

在尝试了很多之后,我终于找到了解决方案。 我从 string.xml 中删除了链接 并将这段代码添加到我的 java 文件中。

Button btnGoogle = ( Button GoogleAlert.findViewById(
                R.id.btnGoogle );
            btnGoogle.setMovementMethod(
                LinkMovementMethod.getInstance() );
            btnGoogle.setOnClickListener( new OnClickListener()
            {
                @Override
                public void onClick( View v )
                {        
                    Uri uri = Uri.parse(
                        "http://www.google.com" );
                    Intent intent = new Intent( Intent.ACTION_VIEW, uri );
                    startActivity( intent );
                    buyAlert.dismiss();
                }
            } );

而且效果很好。

【讨论】:

    【解决方案3】:
    TextView text=(TextView) findViewById(R.id.text);   
    
        String value = "<html> click to go <font color=#757b86><b><a href=\"http://www.google.com\">google</a></b></font> </html>";
    Spannable spannedText = (Spannable)
                    Html.fromHtml(value);
    text.setMovementMethod(LinkMovementMethod.getInstance());
    
    Spannable processedText = removeUnderlines(spannedText);
            text.setText(processedText);
    

    这是你的 removeUnderlines()

    public static Spannable removeUnderlines(Spannable p_Text) {  
                   URLSpan[] spans = p_Text.getSpans(0, p_Text.length(), URLSpan.class);  
                   for (URLSpan span : spans) {  
                        int start = p_Text.getSpanStart(span);  
                        int end = p_Text.getSpanEnd(span);  
                        p_Text.removeSpan(span);  
                        span = new URLSpanNoUnderline(span.getURL());  
                        p_Text.setSpan(span, start, end, 0);  
                   }  
                   return p_Text;  
              }  
    

    同时创建类 URLSpanNoUnderline.java

    import co.questapp.quest.R;
    import android.text.TextPaint;
    import android.text.style.URLSpan;
    
    public class URLSpanNoUnderline extends URLSpan {
        public URLSpanNoUnderline(String p_Url) {
            super(p_Url);
        }
    
        @Override
        public void updateDrawState(TextPaint p_DrawState) {
            super.updateDrawState(p_DrawState);
            p_DrawState.setUnderlineText(false);
            p_DrawState.setColor(R.color.info_text_color);
        }
    }
    

    使用这一行,您还可以更改该文本的颜色 p_DrawState.setColor(R.color.info_text_color);

    【讨论】:

    • 我这样得到灰色链接
    • p_DrawState.setColor(R.color.info_text_color);使用这个你可以改变超链接文本的颜色...... String value = " click to go google.com\">google ";在这里改变颜色为其他颜色
    【解决方案4】:
    TextView text=(TextView) findViewById(R.id.text);
    final String s = text.getText();
    text.setText("");
    text.setText(s);
    

    就是这样,伙计们))

    【讨论】:

    • 对不起,对我不起作用:TextView creditsTextView = (TextView) dialog.getCustomView().findViewById(R.id.text_credits); creditsTextView.setMovementMethod(LinkMovementMethod.getInstance());最终 CharSequence s = creditsTextView.getText(); creditsTextView.setText(""); creditsTextView.setText(s);
    【解决方案5】:

    Kotlin 具有用于删除下划线的 Textview 扩展

    fun TextView.removeLinksUnderline() {
        val spannable = SpannableString(text)
        for (urlSpan in spannable.getSpans(0, spannable.length, URLSpan::class.java)) {
            spannable.setSpan(object : URLSpan(urlSpan.url) {
                override fun updateDrawState(ds: TextPaint) {
                    super.updateDrawState(ds)
                    ds.isUnderlineText = false
                }
            }, spannable.getSpanStart(urlSpan), spannable.getSpanEnd(urlSpan), 0)
        }
        text = spannable
    }
    

    用法:

    txtView.removeLinksUnderline() 
    

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 2018-06-22
      • 2012-03-06
      • 2020-10-30
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 2015-11-10
      相关资源
      最近更新 更多