要搞混合开发,之前零零碎碎也做过 WebView + JS交互,但是现在要加入混合开发的正规军行列,那么就得认真些,比如,从 WebView 加载一个网页开始 ~
必须的:
<uses-permission android:name="android.permission.INTERNET"/>
加载网站:
mWebView = (WebView) findViewById(R.id.wv_test);
mWebView.loadUrl("https://www.baidu.com");
咦,什么都没有:
setJavaScriptEnabled(true) 后:
WebSettings settings = mWebView.getSettings();
// 现在很多网站都用到 JS,要设置为 true才能正确加载网站内容
settings.setJavaScriptEnabled(true);
点击某个网址时提示用系统浏览器打开,怎么办:
了解一下重定向呗:
shouldOverrideUrlLoading 此方法用于此重定向,当用户点击此 mWebView 中的链接时:
1、如果没有此方法,系统会调用系统自带的浏览器打开所点击的链接;
2、如果加了此方法并使用了 mWebView.loadUrl(url),表示在此 mWebView 中打开所点击的链接。
shouldOverrideUrlLoading 返回值:
1、return true; 表示由开发者自行处理此次点击行为(比如打开某个 Activity)
2、return false; 表示由此 WebView 处理此次点击行为
if (isXxxURL(url)) {
openXxxActivity();
return true;
}
return false;
// 链接点击重定向
mWebView.setWebViewClient(new WebViewClient() {
// 21之后用 shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
/*
shouldOverrideUrlLoading 此方法用于此重定向,当用户点击此 mWebView 中的链接时:
1、如果没有此方法,系统会调用系统自带的浏览器打开所点击的链接;
2、如果加了此方法并使用了 mWebView.loadUrl(url),表示在此 mWebView 中打开所点击的链接。
shouldOverrideUrlLoading 返回值:
1、return true; 表示由开发者自行处理此次点击行为(比如打开某个 Activity)
2、return false; 表示由此 WebView 处理此次点击行为
if (isXxxURL(url)) {
openXxxActivity();
return true;
}
return false;
*/
}
});
进入某个网站的十八层页面后,一点击回退就退出当前 Activity,怎么办呢:
@Override
public void onBackPressed() {
// 如果可以回退就回退到上一页,而不是退出当前 Activity
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
// 默认回退处理方式
super.onBackPressed();
}
}
所有代码:
public class TestActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
setContentView(R.layout.activity_test);
initWebView();
}
@SuppressLint("SetJavaScriptEnabled")
private void initWebView() {
mWebView = (WebView) findViewById(R.id.wv_test);
WebSettings settings = mWebView.getSettings();
// 现在很多网站都用到 JS,要设置为 true才能正确加载网站内容
settings.setJavaScriptEnabled(true);
mWebView.loadUrl("https://www.baidu.com");
// 链接点击重定向
mWebView.setWebViewClient(new WebViewClient() {
// 21之后用 shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mWebView.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
/*
shouldOverrideUrlLoading 此方法用于此重定向,当用户点击此 mWebView 中的链接时:
1、如果没有此方法,系统会调用系统自带的浏览器打开所点击的链接;
2、如果加了此方法并使用了 mWebView.loadUrl(url),表示在此 mWebView 中打开所点击的链接。
shouldOverrideUrlLoading 返回值:
1、return true; 表示由开发者自行处理此次点击行为(比如打开某个 Activity)
2、return false; 表示由此 WebView 处理此次点击行为
if (isXxxURL(url)) {
openXxxActivity();
return true;
}
return false;
*/
}
});
}
@Override
public void onBackPressed() {
// 如果可以回退就回退到上一页,而不是退出当前 Activity
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
// 默认回退处理方式
super.onBackPressed();
}
}
}