在WebView中打开URL而不是默认的浏览器。

16 浏览
0 Comments

在WebView中打开URL而不是默认的浏览器。

我正在创建一个简单的Webview应用程序,其中textview上有一些链接,并在webview中打开这些链接,而不是默认浏览器。我的textview包含各种不同的URL,并且我正在尝试在我的应用程序的webview中打开每个链接。

这是代码:

tv.setText("www.google.com  www.facebook.com  www.yahoo.com");
tv.setMovementMethod(LinkMovementMethod.getInstance());;
tv.setText(Html.fromHtml(tv.getText().toString()));
Linkify.addLinks(tv, Linkify.WEB_URLS);
WebViewClient yourWebClient = new WebViewClient()
       {
           // 覆盖页面,这样它只在我的视图中加载
           @Override
           public boolean shouldOverrideUrlLoading(WebView  view, String  url)
           {
            // 这一行让我只加载Firstdroid网页中的页面
            if ( url.contains("www") == true )
               // 加载新的URL,不覆盖URL链接
               return false;
            // 返回true以覆盖URL加载(在这种情况下什么也不做)。
            return true;
           }
       };
wv.getSettings().setJavaScriptEnabled(true);   
    wv.getSettings().setSupportZoom(true);      
    wv.getSettings().setBuiltInZoomControls(true); 
    wv.setWebViewClient(yourWebClient);
    // 加载URL
    wv.loadUrl(url);

已经尝试过这个这个这个示例,但无法解决textview中多个链接的问题。请帮我解决这个问题。感谢您的帮助。

编辑

我的Textview包含如下字符串:

你好xyz还有一些陈述...xyz.com/abc/
你好xyz还有一些陈述...xyz.com/abc/
你好xyz还有一些陈述...xyz.com/abc/
你好xyz还有一些陈述...xyz.com/abc/

类似这样的字符串和多个URL。

0
0 Comments

打开一个URL链接时,通常我们会默认使用默认的浏览器来打开链接。但是有时候我们希望在WebView中打开链接,而不是使用默认浏览器。下面的内容提供了解决这个问题的方法。

问题的解决需要以下几个步骤:

1. 将TextView中的文本链接化

2. 找到一种方法监听TextView中链接的点击事件

3. 获取被点击链接的URL,并在WebView中加载该链接

4. (可选)使TextView可点击同时保留文本选择能力

5. (可选)处理TextView中的格式化文本(不同的文本大小和样式)

第一步:将TextView中的文本链接化

我们可以使用以下代码将TextView中的文本链接化:

String text = "These are some sample links:\nwww.google.com\nwww.facebook.com\nwww.yahoo.com";
Spannable spannable = new SpannableString( Html.fromHtml(text) );
Linkify.addLinks(spannable, Linkify.WEB_URLS);

第二步和第三步:监听TextView中链接的点击事件并在WebView中打开链接

为了监听链接的点击事件并获取链接的URL,我们需要将TextView中的URLSpan替换为我们自定义的LinkSpan。以下是实现这个功能的代码:

URLSpan[] spans = spannable.getSpans(0, spannable.length(), URLSpan.class);
for (URLSpan urlSpan : spans) {
    LinkSpan linkSpan = new LinkSpan(urlSpan.getURL());
    int spanStart = spannable.getSpanStart(urlSpan);
    int spanEnd = spannable.getSpanEnd(urlSpan);
    spannable.setSpan(linkSpan, spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannable.removeSpan(urlSpan);
}
private class LinkSpan extends URLSpan {
    private LinkSpan(String url) {
        super(url);
    }
    public void onClick(View view) {
        String url = getURL();
        if (mWebView != null && url != null) {
            mWebView.loadUrl(url);
        }
    }
}

第四步:使TextView可点击同时保留文本选择能力

如果不设置MovementMethod为LinkMovementMethod,TextView将无法打开链接。以下是设置TextView可点击的代码:

tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(spannable, BufferType.SPANNABLE);

第五步:确保WebView在应用内加载页面而不是打开默认浏览器

为了确保WebView在应用内加载页面,我们需要设置WebView的WebViewClient,并重写shouldOverrideUrlLoading方法。以下是实现这个功能的代码:

mWebView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // we handle the url ourselves if it's a network url (http / https) 
        return ! URLUtil.isNetworkUrl(url);
    }
});

最后,为了实现可点击和可选择的TextView以及处理格式化文本,我们可以创建一个自定义的MovementMethod类,继承自ArrowKeyMovementMethod,并添加处理链接点击和处理格式化文本的功能。以下是实现这个功能的代码:

public class EnhancedLinkMovementMethod extends ArrowKeyMovementMethod {
    // ...
}

以上是解决“在WebView中打开URL链接而不是默认浏览器”的问题的方法。通过以上步骤,我们可以实现在应用内部加载链接,并保留TextView的点击和选择能力。

0
0 Comments

问题的原因是希望在WebView中打开URL而不是默认的浏览器。解决方法是设置WebViewClient,并在shouldOverrideUrlLoading方法中返回false,以确保URL在WebView中打开而不是在默认浏览器中打开。

以下是解决该问题的代码示例:

ProgressDialog progressDialog = new ProgressDialog(WebActivity.this);
WebView webview= (WebView) findViewById(R.id.webview);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.setVerticalScrollBarEnabled(false);
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webview.getSettings().setPluginsEnabled(true);
webview.getSettings().setSupportMultipleWindows(true);
webview.getSettings().setSupportZoom(true);
webview.setVerticalScrollBarEnabled(false);
webview.setHorizontalScrollBarEnabled(false);
webview.loadUrl("http://www.google.com");
webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        progressDialog.dismiss();
    }
    public void onPageStarted(WebView view, String url,Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        progressDialog.setMessage("Loading ...");
        progressDialog.setCancelable(false);
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.show();
    }
});

然而问题是,在TextView中有许多不同的URL,当用户点击任何链接时,希望在WebView中打开所需的URL。因此,我正在寻求如何解决这个问题。

0
0 Comments

问题的原因是用户在点击链接时,默认会在默认浏览器中打开链接,而不是在WebView中打开链接。解决方法是通过在AndroidManifest.xml文件中添加intent-filter,指定要在WebView中打开的链接的主机(host)。然后,在Activity中,可以通过获取Intent中的Action和Data来接收链接,并使用WebView的loadUrl方法来加载链接。

具体的解决方法如下所示:

在AndroidManifest.xml文件中的MainActivity的intent-filter中添加以下代码:

<activity
    android:name=".MainActivity"
    android:label="/title_activity_main">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
        <data android:scheme="https" />
        <data android:host="www.apptecxinc.com" />
    </intent-filter>
</activity>

在MainActivity中的onCreate方法中添加以下代码:

String action = getIntent().getAction();
if (Intent.ACTION_VIEW.equals(action)) {
    Uri uri = getIntent().getData();
    webview.loadUrl(urlsetup(uri.getPath())); 
}

通过以上的代码设置后,当用户点击指定主机(host)为www.apptecxinc.com的链接时,链接将会在WebView中打开,而不是默认浏览器中打开。

0