显示textView内的可点击链接

时间:2015-04-01 08:45:10

标签: java android textview clickable

有人知道如何在textView(或任何适当的视图)内显示可点击链接。textView位于Recycler行内。
我从JSON提要获得字符串响应,在该字符串中,有一个指向某个网页的链接。
当用户点击该链接时,我希望它打开浏览器并转到该页面。
我也试图在Recycler View适配器中处理onBindViewHolder方法内部的点击。
我尝试在xml中设置android:autoLink="web",在java中设置setMovementMethod(LinkMovementMethod.getInstance())这个{ {1}},但它不起作用并给我这个错误:
textView
如果有更好的方法来处理这些情况,请告诉我。

3 个答案:

答案 0 :(得分:1)

使用SpannableString。

例如:我将申请可点击的注册文本(带有下划线的蓝色)意味着,

String text ="Don't have an account? Register";
     SpannableString spannableString = new SpannableString(text);
        spannableString.setSpan(new ForegroundColorSpan(getResources()
                .getColor(R.color.blue)), 23, 31, 0);// i am applying for Register alone. so starting count is 23 and end count is 31.
        ClickableSpan clickableSpan = new SpaceAdjust(text) {
            @Override
            public void onClick(View textView) {
               //here perform your stuff
            }
        };
        spannableString.setSpan(clickableSpan, 23, 31,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

如果你需要使用下划线来制作文字。使用这种方法。

    import android.text.TextPaint;
    import android.text.style.ClickableSpan;
    import android.view.View;

      /**
       * SpaceAdjust.java
      * 
      * This is the class that is used to display underline text
       */
    public class SpaceAdjust extends ClickableSpan {

     /** The clicked. */
      String clicked;

     /**
      * Instantiates a new space adjust.
      * 
      * @param string
      *            the string
      */
      public SpaceAdjust(String string) {
        super();
        clicked = string;
       }

      /*
       * (non-Javadoc)
       * 
      * @see android.text.style.ClickableSpan#onClick(android.view.View)
      */
      public void onClick(View tv) {
        // Un used Code .. Implemented Method
      }

    /*
     * (non-Javadoc)
     * 
     * @see
     * android.text.style.ClickableSpan#updateDrawState(android.text.TextPaint)
     */
    public void updateDrawState(TextPaint ds) {
        ds.setUnderlineText(true); // if you don't want to use underline text, just make this as false.
    }
}

答案 1 :(得分:1)

试试这个,

        <TextView
        android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:autoLink="web"
        android:textColorHighlight="@color/RED"
        android:isScrollContainer="true"
        android:scrollbars="vertical"
        android:textColorLink="@color/RED" />

答案 2 :(得分:0)

尝试

android:linksClickable="true"

中的

以及oncreate of your activity set

 edtLinks.setAutoLinkMask(Linkify.WEB_URLS);

其中,edtLinks是你的TextView。

此外,您还可以在textChangelistner

中添加以下内容
edtLinks.addTextChangedListener(new TextWatcher() {
                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub
                     Linkify.addLinks(s, Linkify.WEB_URLS);
                }

                @Override
                public void beforeTextChanged(CharSequence s, int start,
                        int count, int after) {
                }

                @Override
                public void onTextChanged(CharSequence s, int start,
                        int before, int count) {
                }
            });