Answers:
如果您使用,WebView
则如果您不想使用默认的Android行为,则必须自己拦截点击。
您可以监视的事件WebView
使用WebViewClient
。您想要的方法是shouldOverrideUrlLoading()
。这样,当您选择特定的URL时,您可以执行自己的操作。
您WebViewClient
可以WebView
使用setWebViewClient()
方法设置。
如果您查看WebView
SDK中的示例,则有一个示例可以满足您的需求。就像这样简单:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
在某些情况下,如果您获得的重定向不会触发url加载方法,则可能需要覆盖onLoadResource。在这种情况下,我尝试了以下操作:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
boolean shouldOverrideUrlLoading(WebView view, String url)
API 24中已弃用该方法。如果要支持新设备,则应使用boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
。
您可以通过执行以下操作来使用两者:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
Arulx Z的答案正是我想要的。
我正在使用带有带有recyclerview和webviews的Navigation Drawer编写应用程序,以使Web浏览保持在应用程序内部,而不管单击了超链接如何(因此不会启动外部Web浏览器)。为此,只需放置以下两行代码即可:
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
完全在您的WebView语句下。
这是我实现的WebView代码的示例:
public class WebView1 extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
wv.setWebViewClient(new WebViewClient()); //the lines of code added
wv.setWebChromeClient(new WebChromeClient()); //same as above
wv.loadUrl("http://www.google.com");
}}
这样,在网站上单击的每个链接都将加载到您的WebView中。(使用更新了所有SDK的Android Studio 1.2.2)
WebViewClient
如果您正在做的话,则不需要子类化。我得到这个工作刚刚做myWebView.setWebViewClient(new WebViewClient());