1

我有一个TextView。在这个视图中,我想让它作为文本的某些部分是可点击的。如果您单击该文本,那么我想打开WebView.

我做了以下方式:

textView.setText(Html.fromHtml("I have read and agree to the " +
                     "<a href='id.web.freelancer.example.TCActivity://Kode'>TERMS AND CONDITIONS</a>"));
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());

在这里,如果您单击TERMS AND CONDITIONS然后它会在浏览器中打开,但我想在WebView.

4

4 回答 4

2

另一种方式,从 Linkify 中借用一点,但允许您自定义您的处理方式。

自定义跨度类:

public class ClickSpan extends ClickableSpan {

    private OnClickListener mListener;

    public ClickSpan(OnClickListener listener) {
        mListener = listener;
    }

    @Override
    public void onClick(View widget) {
       if (mListener != null) mListener.onClick();
    }

    public interface OnClickListener {
        void onClick();
    }
}

辅助功能:

public static void clickify(TextView view, final String clickableText, 
    final ClickSpan.OnClickListener listener) {

    CharSequence text = view.getText();
    String string = text.toString();
    ClickSpan span = new ClickSpan(listener);

    int start = string.indexOf(clickableText);
    int end = start + clickableText.length();
    if (start == -1) return;

    if (text instanceof Spannable) {
        ((Spannable)text).setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    } else {
        SpannableString s = SpannableString.valueOf(text);
        s.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        view.setText(s);
    }

    MovementMethod m = view.getMovementMethod();
    if ((m == null) || !(m instanceof LinkMovementMethod)) {
        view.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

用法:

clickify(textView, clickText,new ClickSpan.OnClickListener()
     {
        @Override
        public void onClick() {
            // do something
        }
    });
于 2012-04-27T07:37:10.920 回答
1

试试这个可能有效

   SpannableString span = new SpannableString(
        "Click here to for gmail page.");


    span.setSpan(new URLSpan("http://www.gmail.com"), 6, 10,
               Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    TextView tv = (TextView) findViewById(R.id.text);
    tv.setText(span);
    tv.setMovementMethod(LinkMovementMethod.getInstance());

根据您的文本大小更改开始和结束位置

于 2012-04-27T07:19:19.357 回答
0

如何使 TextView 中的链接可点击?

或者您可以创建具有水平方向的线性布局,具有 2 个文本视图,使第二个文本视图可点击..

于 2012-04-27T06:34:29.967 回答
0

为什么不对 onClick 方法进行 textView 调用:

<TextView
    ...
    android:onClick"openWebView"
    ...
/>

然后在你的活动中有一个方法叫做:

public void openWebView (View v) {
    ....
    // Do something
}
于 2012-04-27T06:39:26.590 回答