【问题标题】:how to control textView onclicklistener with autolink web setting or in other words,intercept autolink web OnClick event?如何使用自动链接网络设置控制 textView onclicklistener,或者换句话说,拦截自动链接网络 OnClick 事件?
【发布时间】:2016-07-25 03:43:56
【问题描述】:

如何通过autolink web 设置控制textView onclicklistener 或者换句话说,拦截autolink web OnClick 事件?

例如,String text="Lucy is very nice.Here is her link.https://www.google.com";textview.setText(text); 单击“https://www.google.com”时,我可以抓住它并跳转到我的应用程序活动而不是网络浏览器。 Textview有一个属性“autolink”。我设置autolink为web.android:autoLink="web" 这样,android系统可以自动检测url。点击url时会跳转到浏览器。现在点击时,我没有想跳到浏览器,我只想跳到我的应用活动并留在应用中。

【问题讨论】:

  • 你应该看到this
  • 我没试过,但我想你可以在你的应用程序中使用“深层链接”。
  • 您想在应用程序的活动中显示打开的链接吗?
  • 是的,我在 TextView android:autoLink="web" 中设置的 android 系统检测到 url。但是当我点击 url 时,它总是自动跳转到浏览器。我想捕捉 url跳转到具体的活动。你能帮帮我吗?
  • 在 WebViewClient 中检查 shouldOverrideUrlLoading

标签: android


【解决方案1】:

感谢您的所有回答。现在我找到了我的问题的答案。有两个步骤。

1.你需要设置 Textview 属性。 android:autoLink="web"

  <TextView  
    android:id="@+id/text_view"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:autoLink="web"  
    android:text="Lucy is very nice.Here is her link.https://www.google.com" />

2.override URL onclick。有一个例子。

公共类 MainActivity 扩展 Activity {

TextView tv;  

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
    tv = (TextView) findViewById(R.id.tv);  
    CharSequence text = tv.getText();  
    if (text instanceof Spannable) {  
        int end = text.length();  
        Spannable sp = (Spannable) text;  
        URLSpan urls[] = sp.getSpans(0, end, URLSpan.class);  
        SpannableStringBuilder style = new SpannableStringBuilder(text);  
        style.clearSpans();  
        for (URLSpan urlSpan : urls) {  
            MyURLSpan myURLSpan = new MyURLSpan(urlSpan.getURL());  
            style.setSpan(myURLSpan, sp.getSpanStart(urlSpan),  
                    sp.getSpanEnd(urlSpan),  
                    Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  

        }  
        tv.setText(style);  
    }  
}  

private class MyURLSpan extends ClickableSpan {  

    private String url;  

    public MyURLSpan(String url) {  
        this.url = url;  
    }  

    @Override  
    public void onClick(View arg0) {  
        Toast.makeText(MainActivity.this, url, Toast.LENGTH_LONG).show(); 
    }  

}  

}

3.上面的代码完美解决了我的问题。所以当我在Textview中点击www.google.com时,url会显示出来并跳转到一个特定的活动。

【讨论】:

    【解决方案2】:

    由于您的问题不清楚,我给您的答案可能会有所帮助。 创建另一个要显示链接的活动:

       WebView wv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_search);
        Bundle bundle = getIntent().getExtras();
        String url = bundle.getString("message");
        wv=(WebView)findViewById(R.id.left_webview);
    
        getActionBar().setHomeButtonEnabled(true);
    
        //wv.getSettings().setJavaScriptEnabled(true);
        wv.getSettings().setSupportMultipleWindows(true);
        wv.loadUrl(url);
    
        wv.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                System.out.println("URL :: " + url);
                view.loadUrl(url);
                return true;
            }
        });
    
    }
    

    在 textView 活动中:

    Intent i = new Intent(TextViewActivity.this,NextActivity.class);
                i.putExtra("message","https://google.com");
                startActivity(i);
    

    【讨论】:

    • 谢谢你的回答。我的意思是:Textview有一个属性“autolink”。我将autolink设置为web.android:autoLink="web" 所以,android系统可以自动检测url。当点击url,它会跳转到浏览器。现在点击时,我不想跳转到浏览器,我只想跳转到我的应用程序活动并留在应用程序中。你明白吗?
    • 试试吧,我想它会帮助你得到你想要的
    【解决方案3】:

    如果我理解你的问题是正确的,这就是你要找的。为了控制 TextView 内文本的点击事件,您必须使用 HTML 创建链接并使用 SpannableString

            // textView.setText("Lucy is very nice. Here is her link. https://www.google.com");
            final String source = "Lucy is very nice. Here is her link. <a href=\"scheme://some.link\">Click</a>";
            final Spanned html = Html.fromHtml(source);
            final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(html);
            final URLSpan[] spans = spannableStringBuilder.getSpans(0, html.length(), URLSpan.class);
            final URLSpan span = spans[0];
            final int start = spannableStringBuilder.getSpanStart(span);
            final int end = spannableStringBuilder.getSpanEnd(span);
            final int flags = spannableStringBuilder.getSpanFlags(span);
            final ClickableSpan clickableSpan = new ClickableSpan() {
                public void onClick(View view) {
                    Log.d(TAG, "Clicked: " + span.getURL());
                }
            };
            spannableStringBuilder.setSpan(clickableSpan, start, end, flags);
            spannableStringBuilder.removeSpan(span);
            textView.setText(spannableStringBuilder);
            textView.setLinksClickable(true);
            textView.setMovementMethod(LinkMovementMethod.getInstance());
    

    编辑

    因此,根据您的评论,您不能使用 HTML,所以这里是另一个示例,从 TextView 中提取文本,并设置了 autoLink

        final TextView textView = (TextView) findViewById(R.id.text);
        final CharSequence text = textView.getText();
        final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text);
        final URLSpan[] spans = spannableStringBuilder.getSpans(0, text.length(), URLSpan.class);
        final URLSpan span = spans[0];
        final int start = spannableStringBuilder.getSpanStart(span);
        final int end = spannableStringBuilder.getSpanEnd(span);
        final int flags = spannableStringBuilder.getSpanFlags(span);
        final ClickableSpan clickableSpan = new ClickableSpan() {
            public void onClick(View view) {
                Log.d(TAG, "Clicked: " + span.getURL());
            }
        };
        spannableStringBuilder.setSpan(clickableSpan, start, end, flags);
        spannableStringBuilder.removeSpan(span);
        textView.setText(spannableStringBuilder);
        textView.setLinksClickable(true);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    

    【讨论】:

    • 谢谢你的回答。我知道​​你的意思。但是,我没有使用过HTML。这是一个聊天应用,你发短信,我收到。url检测由android完成带有 textview 设置的系统 android:autoLink="web"。我无法创建 html 链接。
    【解决方案4】:

    我不明白你想说什么,但这会打开一个 URL,或者你可以像复制和粘贴一样将它复制到剪贴板。

    button.setOnClickListener((View.OnClickListener) v -> {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
                startActivity(browserIntent);
            }
    

    【讨论】:

    • Textview有一个属性“autolink”。我设置autolink为web.android:autoLink="web" 这样,android系统可以自动检测url。点击url时会跳转到浏览器.现在点击的时候,我不想跳转到浏览器,我只想跳转到我的应用活动并留在应用中。你明白吗?
    • button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { setContentView(R.layout."activity you want to use"); 也许不要使用 textView。听起来好像有更好的解决方法。或者你有一个网页浏览应用程序?} } } }
    • 我正在做一个聊天应用程序。聊天列表控件必须是 textview。
    • 好吧,我想,我有你的答案 myWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.startsWith("www"){ return true; } 返回 false; } });
    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2011-02-15
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多