在Webview中打开链接而不是默认浏览器

8

我有这段代码:

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

我需要在Web视图中打开链接,而不是在浏览器中...这可能吗?我该怎么做?
谢谢您提前的帮助。
2个回答

7
此外,你可以这样做。
    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 视图活动添加意图过滤器,则最佳答案。 - Mister Smith
最佳答案! - Michalsx

6
是的,您可以使用WebView完成这个相当简单的任务。您需要声明一个 WebViewClient 对象并重写 public boolean shouldOverrideUrlLoading (WebView view, String url) 方法,在那里您可以过滤URL或提供一些自定义功能。
在您的情况下,为了停留在WebView上,您需要在该方法中返回 false。
请查阅 此教程
祝好,
编辑:
看起来您的问题是如何处理TextView的url点击事件。正如这个问题所建议的那样,您可以在包含WebView的Activity中过滤ACTION_VIEW意图。如果您需要更多关于意图筛选器的指导,请查看这里

谢谢,但是这个方法不起作用...我一开始没有 WebView ... 当我点击链接时,我想显示 WebView 而不是浏览器 ^^ 这可能吗? - Erenwoid
@Erenwoid,现在我明白你的问题了,你想要处理当TextView上的URL被点击时分发的Intent。好的,请看我的编辑答案。 - mdelolmo
但是它仍然会强制你显示应用选择器,因为用户将能够通过外部浏览器进行浏览。 - nbtk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接