【问题标题】:Open a link in a webview instead of default browser在 web 视图而不是默认浏览器中打开链接
【发布时间】:2011-07-09 17:22:27
【问题描述】:

我有这段代码:

    TextView noteView = (TextView) view.findViewById(R.id.content);
    noteView.setMovementMethod(LinkMovementMethod.getInstance());
    noteView.setText(Html.fromHtml(noteView.getText().toString()));

我需要在网页视图中打开链接,而不是在浏览器中...这可能吗?我该怎么办??

提前谢谢..

【问题讨论】:

    标签: android webview


    【解决方案1】:

    另外,你可以这样做。

        package com.TextHtml;
    
        import android.app.Activity;  
        import android.content.Context;  
        import android.os.Bundle;  
        import android.text.Html;  
        import android.text.Spannable;  
        import android.text.SpannableStringBuilder;  
        import android.text.method.LinkMovementMethod;  
        import android.text.style.ClickableSpan;  
        import android.text.style.URLSpan;  
        import android.view.View;  
        import android.widget.TextView;  
        import android.widget.Toast;  
        public class TextHtml extends Activity {
    
            private TextView  tv;  
            static Context ctx=null;  
            @Override  
            public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState);  
                setContentView(R.layout.main);  
                ctx=this;  
                tv = (TextView) findViewById(R.id.tv);   
                String htmlLinkText = "<a href="/" mce_href="/""http://www.google.com/"><u>hello google </u></a>";     
                tv.setText(Html.fromHtml(htmlLinkText));  
                tv.setMovementMethod(LinkMovementMethod.getInstance());     
                CharSequence text = tv.getText();     
                if(text instanceof Spannable){     
                    int end = text.length();     
                    Spannable sp = (Spannable)tv.getText();     
                    URLSpan[] urls=sp.getSpans(0, end, URLSpan.class);      
                    SpannableStringBuilder style=new SpannableStringBuilder(text);     
                    style.clearSpans();//should clear old spans     
                    for(URLSpan url : urls){     
                        CustomerTextClick click = new CustomerTextClick(url.getURL());     
                        style.setSpan(click,sp.getSpanStart(url),sp.getSpanEnd(url),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);     
                    }     
                    tv.setText(style);     
                }  
            }  
    
            private static class CustomerTextClick extends ClickableSpan{     
    
                private String mUrl;     
                MyURLSpan(String url) {     
                    mUrl =url;     
                }     
                @Override  
                public void onClick(View widget) {  
                    // TODO Auto-generated method stub  
                    Toast.makeText(ctx, "hello google!",Toast.LENGTH_LONG).show();  
                }     
            }  
        } 
    

    【讨论】:

    • 如果您不想将意图过滤器添加到 Web 视图活动中,则为最佳答案。
    • 最佳答案!
    【解决方案2】:

    是的,你可以这样做,这对 WebView 来说非常简单,你需要声明一个 WebViewClient 对象并覆盖 public boolean shouldOverrideUrlLoading (WebView view, String url) 方法,在那里你可以过滤 url 或提供一些自定义功能。

    在您的情况下,要留在 WebView 上,您需要在该方法上返回 false。

    查看this tutorial

    问候

    已编辑:

    看来您的问题是如何处理 TextView 的 url 上的点击事件。作为it's suggested on this question,您可以在包含活动的WebView 上过滤ACTION_VIEW 意图。如果你需要more guidance about intent-filters, check this out

    【讨论】:

    • 谢谢,但这不起作用...我一开始没有 WebView...当我单击链接时,我会显示 Web 视图而不是浏览器 ^^有可能吗?
    • @Erenwoid,现在我得到你的问题,你想在点击 TextView url 时处理 Intent。好吧,看看我编辑的答案。
    • 但它仍然会强制您显示应用选择器,因为用户将能够通过外部浏览器浏览
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2012-07-18
    • 1970-01-01
    • 2010-09-16
    • 2018-05-02
    • 2012-07-09
    相关资源
    最近更新 更多