【问题标题】:Android open new activity when click link from textview(autolink)当点击来自textview(自动链接)的链接时,Android会打开新活动
【发布时间】:2017-11-07 08:52:28
【问题描述】:

我有一个视图显示 textview 并启用自动链接。

<TextView
   android:id="@+id/txt_contents"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_margin="30dp"
   android:textColor="@color/txt_code_itemlist"
   android:autoLink="web"
   android:textSize="22sp" />

现在,当我单击 textview 中的链接时,它将打开浏览器。但是当我点击相同的链接时,我想找到打开新活动的方法。

【问题讨论】:

  • 在 textview 上实现 onclick 监听器
  • @JaydeepPatel 我只想在 http 链接上启用点击操作。
  • 检查文本是否为url:URLUtil.isValidUrl(url)
  • @Goffity 你找到解决方案了吗?

标签: android hyperlink textview


【解决方案1】:

可以在TextView中使用Linkify,

    TextView sample = (TextView) findViewById(R.id.txt_contents);

    String webUrlOrText = "www.google.com a search Engine";
    Spannable spannableString = new SpannableString(Html.fromHtml(webUrlOrText));



    Linkify.addLinks(spannableString, Linkify.WEB_URLS); // It will make only Weblink clickable

    URLSpan[] urlSpans = spannableString.getSpans(0, spannableString.length(), URLSpan.class);
    for (URLSpan urlSpan : urlSpans) {
        LinkSpan linkSpan = new LinkSpan(urlSpan.getURL());
        int spanStart = spannableString.getSpanStart(urlSpan);
        int spanEnd = spannableString.getSpanEnd(urlSpan);
        spannableString.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.removeSpan(urlSpan);
    }

    sample.setText(spannableString);
    sample.setMovementMethod(LinkMovementMethod.getInstance());

还有 LinkSpan 类,

private class LinkSpan extends URLSpan {
    private LinkSpan(String url) {
        super(url);
    }

    @Override
    public void onClick(View view) {
        String url = getURL();

        if (url != null) {
           // Open the Activity here
           Log.d(TAG, "Url clicked");
        }
    }
}

【讨论】:

  • 它仍然是打开的网络浏览器。
  • 我编辑了我的答案,我添加了示例 TextView,我检查了我的设备,它工作正常。如果我们点击“www.google.com”它将打印该日志如果您点击它不会打印日志。
  • 我跟着你回答。它可以检测到 url,我检查了 spanStart 和 spanEnd 的日志,但是 onClick 事件不起作用。我在 android 6.0 上测试。
  • 这行你加了吗,sample.setMovementMethod(LinkMovementMethod.getInstance());
  • 我添加了 sample.setMovementMethod(LinkMovementMethod.getInstance());已经。
【解决方案2】:

完美的工作:

    tvoublie.setPaintFlags(tvoublie.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
            Linkify.addLinks(tvoublie, Linkify.ALL);
            tvoublie.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i("LoginActivity", "Sign Up Activity activated.");
                    // this is where you should start the new Activity
                   Intent intent = new Intent(CurrentActivity.this,YourNewActivity.class);
                   startActivity(intent);  

                }
            });

用 url 打开浏览器:

register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.addCategory(Intent.CATEGORY_BROWSABLE);
                intent.setData(Uri.parse("https://www.google.com"));
                startActivity(intent);
            }
        });

【讨论】:

【解决方案3】:

你可以添加这个。

text_view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          Intent intent = new Intent(CurrentActivity.this,YourNewActivity.class);
          startActivity(intent);  
        }
    });

希望这会有所帮助。

【讨论】:

  • 谢谢。 @sarthak,但是当单击 Textview 的任何区域时,此解决方案将打开新活动。我希望能够仅事件 http 链接。
【解决方案4】:

使用下面的代码来识别文本的哪一部分被点击了

tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    ClassroomLog.log(TAG, "Textview Click listener ");
    if (tv.getSelectionStart() == -1 && tv.getSelectionEnd() == -1) {
        //This condition will satisfy only when it is not an autolinked text
        //Fired only when you touch the part of the text that is not hyperlinked 
    }
}

});

并编写代码来做任何你想做的事情

【讨论】:

    猜你喜欢
    • 2015-02-08
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多