【问题标题】:TextView Hyperlink is not working?TextView 超链接不起作用?
【发布时间】:2012-07-09 22:23:25
【问题描述】:

为什么TextView 超链接不起作用。

在自定义dialog box 中使用超链接。

超链接不出现。

我哪里弄错了。怎么解决。给我指导。

XML 代码是

<TextView
android:id="@+id/google_Link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:padding="10dip"
android:textSize="20dip"
android:linksClickable="true"  
android:autoLink="all"
android:textColorLink="#306EFF"
android:text="" />

Android 代码是

TextView googleLink = ( TextView ) layout.findViewById( R.id.google_Link );
googleLink.setClickable(true);
googleLink.setMovementMethod(LinkMovementMethod.getInstance());
googleLink.setText( Html.fromHtml( "<a href=`http://www.google.co.in`>Google</a>" ) );

Android 清单代码是

<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

提前致谢。

【问题讨论】:

  • 反引号在 HTML 中不用于字符串分隔符。在 Java 中使用 \" 在带引号的字符串中嵌入引号。我也会去掉setClickable()setMovementMethod(),因为它们应该由你提议的TextView 内容处理。

标签: android xml android-layout hyperlink


【解决方案1】:

仅替换此链接,它将起作用:

TextView textView=(TextView) findViewById(R.id.link);
textView.setClickable(true);
String linkTxt=getResources().getString(R.string.link);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(Html.fromHtml( linkTxt));

在strings.xml中添加:

<string name="link">&lt;a href=http://www.google.co.in&gt;Google&lt;/a&gt;</string>

【讨论】:

    【解决方案2】:

    此问题的最佳解决方案是: 首先,创建一个 Textview。

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/link"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:text="@string/developed_by_bracecodes"/>
    

    然后从 strings.xml 向您的 Textview 添加文本,如下所示:

    <string name="developed_by_bracecodes"><a href="http://www.bracecodes.com">Developed by Bracecodes</a>  </string>
    

    注意:不要忘记在链接前添加 http://

    然后在您的 java 代码中添加这些行:

    TextView link = findViewById(R.id.link);
    link.setMovementMethod(LinkMovementMethod.getInstance());
    

    编码愉快! 谢谢!

    【讨论】:

      【解决方案3】:

      它不起作用,因为您无法将 href 设置为 TextView

      您需要设置一个 OnClickListener,它的 onClick 方法中有这个:

      String url = "http://www.google.co.in";
      Intent i = new Intent(Intent.ACTION_VIEW);
      i.setData(Uri.parse(url));
      startActivity(i);
      

      之后,您可以将侦听器设置为您的TextView,如下所示:googleLink.setOnClickListener(myListener);

      然后再次运行应用程序,点击应该可以正确处理。

      【讨论】:

      • 谢谢。它正在工作。但是没有出现超链接。如何设置超链接。
      • 你可以使用TextViewsetText("http://www.google.co.in")方法。
      • 谢谢。它正在工作。但是当我可以使用TextViewsetText("Google");方法时,超链接不会出现。
      • 如何添加带有下划线的自定义标题。
      • 这是一个不同的问题。我建议阅读documentation for TextView 并检查它的内容。
      【解决方案4】:

      您的解决方案就在这里。 https://github.com/saket/Better-Link-Movement-Method

      implementation 'me.saket:better-link-movement-method:1.1'
      
      
      
       message?.message?.let {
                  chatMessageTextView.setText(HtmlCompat.fromHtml(it.trim(), HtmlCompat.FROM_HTML_MODE_LEGACY),TextView.BufferType.SPANNABLE)
              }
      
        chatMessageTextView.movementMethod = BetterLinkMovementMethod.newInstance().apply {
              setOnLinkClickListener { _, url ->
                  // Handle click or return false to let the framework handle this link.
      
             
                  handleMessageLink(itemView.context,url)
                  true
              }
          }
      
           <TextView
                  android:id="@+id/chat_message_text_view"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_below="@+id/files_layout"
                  android:layout_marginStart="@dimen/space_ultra_small"
                  android:text="@string/text_small"
                  android:textColor="@color/black"
                  android:padding="@dimen/space_ultra_small"
                  android:textColorLink="@color/sky_blue"
                  android:textSize="@dimen/text_size_large" />
      

      【讨论】:

        【解决方案5】:
        public class HtmlTextView extends TextView {
            public HtmlTextView(Context context) {
                super(context);
            }
        
            public HtmlTextView(Context context, @Nullable AttributeSet attrs) {
                super(context, attrs);
            }
        
            public HtmlTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
                super(context, attrs, defStyleAttr);
            }
        
            @Override
            public void setText(CharSequence text, BufferType type) {
                Spannable spannable = linkifyHtml(String.valueOf(text), Linkify.ALL);
                super.setText(spannable, type);
            }
        
            private static Spannable linkifyHtml(String html, int linkifyMask) {
                Spanned text = Html.fromHtml(html);
                URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
        
                SpannableString buffer = new SpannableString(text);
                Linkify.addLinks(buffer, linkifyMask);
        
                for (URLSpan span : currentSpans) {
                    int end = text.getSpanEnd(span);
                    int start = text.getSpanStart(span);
                    buffer.setSpan(span, start, end, 0);
                }
                return buffer;
            }
        }
        

        HtmlTextView mText = view.findViewById(R.id.text); mText.setMovementMethod(LinkMovementMethod.getInstance()); mText.setText("http://www.google.com>谷歌");

        【讨论】:

          【解决方案6】:
          <TextView 
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" 
          android:id="@+id/hyperlink" 
          android:text="@string/hyperlink"
          android:textColorLink="@color/quantum_yellow"
          **android:autoLink="web"**
          />
          

          使用autoLink=web 将链接文本自动定义为可点击的超链接。你也可以使用textColorLink来决定它的颜色

          【讨论】:

            猜你喜欢
            • 2013-05-22
            • 1970-01-01
            • 1970-01-01
            • 2016-12-13
            • 2019-07-14
            • 2018-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多