如何从android中的超链接文本中删除下划线?

时间:2011-12-09 16:14:23

标签: android

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

<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"。但是,当我使用它时,文本和按钮的颜色会发生变化,我不希望这样。

请帮助。

5 个答案:

答案 0 :(得分:9)

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);

的颜色

答案 1 :(得分:1)

经过多次尝试后我终于找到了解决方案。 我从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();
                }
            } );

它完美无缺。

答案 2 :(得分:1)

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() 

答案 3 :(得分:0)

您将style=\"text-decoration:none\"添加到<a>代码。

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

答案 4 :(得分:-3)

TextView text=(TextView) findViewById(R.id.text);
final String s = text.getText();
text.setText("");
text.setText(s);

就是这样,伙计们))