在Android中,使用WebView加载网页时,在AndroidManifest.xml添加了网络权限 <uses-permission android:name="android.permission.INTERNET" />还是会出现下面的错误页面。
第一步:在项目文件夹建一个子文件夹res/xml,新建network_security_config.xml文件,保存到res/xml下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
第二步:修改AndroidManifest.xml文件,在application节点增加networkSecurityConfig配置:
android:networkSecurityConfig="@xml/network_security_config"
第三步:用WebView加载网页
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" android:configChanges="orientation|keyboard"
android:screenOrientation="landscape"
tools:context=".MainActivity">
<WebView android:id="@+id/c131_webkit"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.qingshan.webbroswer;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//不显示标题
setTheme(R.style.Theme_AppCompat_NoActionBar);
//全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView browser=(WebView)findViewById(R.id.c131_webkit);
WebSettings settings = browser .getSettings();
settings.setJavaScriptEnabled(true);// 让WebView能够执行javaScript
settings.setDomStorageEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);// 让JavaScript可以自动打开windows
settings.setAppCacheEnabled(true); // 设置缓存
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 设置缓存模式,一共有四种模式
settings.setSupportZoom(true);// 支持缩放(适配到当前屏幕)
settings.setUseWideViewPort(true); // 将图片调整到合适的大小
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 支持内容重新布局,一共有四种方式 默认的是NARROW_COLUMNS
settings.setDisplayZoomControls(true); // 设置可以被显示的屏幕控制
settings.setDefaultFontSize(12); // 设置默认字体大小
browser.loadUrl("http://rc114.com");
//browser.loadData("<html><body><h2>Hello , world!</h2></body></html>", "text/html", "UTF-8");
//实现:WebView里的链接,都在自身打开,不调用系统浏览器
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
//实现:按手机回退键,如果浏览器有上一个网页,则返回上一个网页
browser.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK && browser.canGoBack() ) {
browser.goBack();
return true;
}
}
return false;
}
});
}
}