如何在超链接上注册OnClickListner

时间:2015-09-28 10:44:25

标签: android hyperlink

我在aap中使用了一个文本视图,它有平面文本和超链接。现在当我点击超链接然后用默认浏览器链接打开。但实际上我不想打开默认浏览器。实际上我想在超链接上注册OnClickListener并想要执行其他操作。

我在互联网上搜索,我得到了这个解决方案......

Control onclicklistener in autolink enabled textview

但这对我没有帮助。

任何人都可以告诉我如何执行此操作。

提前致谢

5 个答案:

答案 0 :(得分:1)

您可以使用Spannable对象

final Spannable span = new SpannableString(text);
span.setSpan(new ClickableSpan() {
      @Override
      public void onClick(View v) {

      }
}, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

其中text是您的超链接

答案 1 :(得分:1)

删除android:autoLink =" web"如果此属性设置为XML。

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);

当您想在浏览器中打开时使用此代码

textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

如果你想执行一些操作注册onclick listener for textview并执行。

textView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                }
            });

答案 2 :(得分:1)

尝试执行此操作添加 在你的 的 main.xml中

<TextView
       android:id="@+id/yourTVID"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:onClick="performSomeAction" />
SomeActivity.java

中的

public void performSomeAction( View v){ 
//Perform your action
}

答案 3 :(得分:1)

试试这个,它应该可以解决你的问题。此方法将返回一个Spannable String,其中有一部分可单击。

在调用下面的方法之前,你应该从String中创建CharSequence然后将其转换为Spannable

CharSequence charSequencce = testView.getText();
    Spannable spannable = (Spannable) charSequencce;

public SpannableStringBuilder addClickToPartsOfString(Spannable charSequence, String[] stringsToAddClick, final OnHyperLinkClickListener onClickListener) {
    SpannableStringBuilder  ssb = new SpannableStringBuilder(charSequence);

    for(final String s : stringsToAddClick) {
        int index1 = charSequence.toString().indexOf(s);
        int index2 = (s.length() + index1);
        ssb.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                onClickListener.onClick(s);
            }
        }, index1, index2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    return ssb;
}

答案 4 :(得分:0)

我刚刚建立了一个旨在简化这一过程的图书馆。见Textoo。您可以使用以下代码实现相同的目标:

    TextView locNotFound = Textoo
        .config((TextView) findViewById(R.id.view_location_disabled))
        .addLinksHandler(new LinksHandler() {
            @Override
            public boolean onClick(View view, String url) {
                if ("internal://settings/location".equals(url)) {
                    Intent locSettings = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(locSettings);
                    return true;
                } else {
                    return false;
                }
            }
        })
        .apply();

在内部,库将textview / string资源中的现有链接(android系统将字符串资源中的html链接解析为Span)转换为自定义ClickableSpan,并将点击次数转换为对处理程序的调用。

这使您无需计算和硬编码可点击跨度的位置即可添加。因此,可以更轻松地将文本外部化为字符串资源,并更好地进行本地化。