Android WebView常見問題

      網友投稿 951 2022-05-30

      前言

      于 Android P (9.0)限制了明文流量的網絡請求,非加密的流量請求都會被系統禁止掉,所以如果訪問沒有https協議的網站默認不不可以訪問的。

      提示:以下是本篇文章正文內容,下面案例可供參考

      一、webview的簡單使用

      1.load網址

      //找到控件 web_view = (WebView) findViewById(R.id.web_view); //加載網頁 web_view.loadUrl(weburl);

      如果你是真機調試,且手機系統比較高的話,應該會報錯:網頁無法加載,應為:net :ERR_CLEARTEXT_NOT_PERMITTED

      解決方式于第二個某塊

      2.設置一些屬性

      web_view = (WebView) findViewById(R.id.web_view); WebSettings webSettings = web_view.getSettings(); // 讓WebView能夠執行javaScript webSettings.setJavaScriptEnabled(true); // 讓JavaScript可以自動打開windows webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //是否允許訪問文件 webSettings.setAllowFileAccess(true); // 設置緩存 webSettings.setAppCacheEnabled(true); // 設置緩存模式,一共有四種模式 webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK); // 支持縮放(適配到當前屏幕) webSettings.setSupportZoom(true); // 將圖片調整到合適的大小 webSettings.setUseWideViewPort(true); // 支持內容重新布局 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 設置可以被顯示的屏幕控制 webSettings.setDisplayZoomControls(true); // 設置默認字體大小 webSettings.setDefaultFontSize(12); web_view.loadUrl(weburl);

      這里就只介紹本例子用的一些屬性了,如需了解更多,請前往Android中文文檔

      3.寫一個監聽

      web_view.setWebViewClient(new WebViewClient() { //當新的 url 即將被加載的時候---->用戶點擊了 Webview 內容里面的一個超鏈接的時候會觸發該方法的調用 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } //在頁面加載開始時調用。 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } //在頁面加載結束時調用。 @Override public void onPageFinished(WebView view, String url) { weburl=url; super.onPageFinished(view, url); } });

      這里主要介紹三個方法

      Android WebView常見問題

      4.返回上一次瀏覽的頁面

      @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { if (web_view.canGoBack()) { web_view.goBack(); return true; } else { finish(); return true; } } return false; }

      二、遇到的一些問題

      1.ERR_CLEARTEXT_NOT_PERMITTED

      原因:于 Android P (9.0)限制了明文流量的網絡請求,非加密的流量請求都會被系統禁止掉,所以如果訪問沒有https協議的網站默認不不可以訪問的。

      解決:

      在AndroidManifest.xml文件的application標簽中添加

      android:usesCleartextTraffic="true"

      2.便頁面支持縮放

      WebSettings webSettings =web_view.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(true); webSettings.setSupportZoom(true);

      3.自適應屏幕

      WebSettings webSettings =web_view.getSettings(); webSettings.setUseWideViewPort(true);//設置此屬性,可任意比例縮放 webSettings.setLoadWithOverviewMode(true);

      三、源碼

      WebActivity.java

      public class WebActivity extends Activity { private WebView web_view; private String weburl = "http://www.jimengjia.com/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); initView(); webViewClient(); webViewSetting(); } private void initView() { web_view = (WebView) findViewById(R.id.web_view); } private void webViewClient(){ web_view.setWebViewClient(new WebViewClient() { //當新的 url 即將被加載的時候---->用戶點擊了 Webview 內容里面的一個超鏈接的時候會觸發該方法的調用 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } //在頁面加載開始時調用。 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } //在頁面加載結束時調用。 @Override public void onPageFinished(WebView view, String url) { weburl=url; super.onPageFinished(view, url); } }); } private void webViewSetting(){ WebSettings webSettings = web_view.getSettings(); // 讓WebView能夠執行javaScript webSettings.setJavaScriptEnabled(true); //是否允許訪問文件 webSettings.setAllowFileAccess(true); // 讓JavaScript可以自動打開windows webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 設置緩存 webSettings.setAppCacheEnabled(true); // 設置緩存模式,一共有四種模式 webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK); // 支持縮放(適配到當前屏幕) webSettings.setSupportZoom(true); // 將圖片調整到合適的大小 webSettings.setUseWideViewPort(true); // 支持內容重新布局 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 設置可以被顯示的屏幕控制 webSettings.setDisplayZoomControls(true); // 設置默認字體大小 webSettings.setDefaultFontSize(12); web_view.loadUrl(weburl); } //返回上一次瀏覽的頁面 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { if (web_view.canGoBack()) { web_view.goBack(); return true; } else { finish(); return true; } } return false; } }

      activity_web.xml

      總結

      希望對您有所幫助

      Android WebView

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Flask學習與實戰11:WebSocket的使用與簡單通信
      下一篇:【nodejs原理&源碼賞析(5)】net模塊與通訊的實現
      相關文章
      亚洲毛片av日韩av无码| 亚洲AV成人片色在线观看 | 亚洲av无码专区国产乱码在线观看| 亚洲乱码无人区卡1卡2卡3| 亚洲一级视频在线观看| 亚洲电影在线播放| 久久亚洲精品无码VA大香大香| 久久精品国产亚洲沈樵| 亚洲中文字幕无码中文字在线| 亚洲午夜精品久久久久久浪潮| 亚洲国产精品一区二区九九| 亚洲av无码天堂一区二区三区| 毛片亚洲AV无码精品国产午夜| 豆国产96在线|亚洲| 国产成人综合久久精品亚洲| 国产精品亚洲专区无码WEB| 亚洲高清一区二区三区电影 | 亚洲一区二区无码偷拍| 亚洲综合激情五月色一区| 伊人久久亚洲综合影院首页| 亚洲一区二区三区丝袜| 亚洲熟妇无码八V在线播放| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲中文字幕无码mv| 亚洲精品成a人在线观看☆| 久久精品国产亚洲AV天海翼 | 久久久久亚洲精品无码网址色欲| 激情无码亚洲一区二区三区 | 国产青草亚洲香蕉精品久久| 亚洲成av人在片观看| 亚洲一区二区视频在线观看| 亚洲午夜久久久久久噜噜噜| 亚洲大尺度无码专区尤物| 亚洲国产成人精品不卡青青草原| 中文字幕亚洲第一在线| 亚洲依依成人精品| 亚洲成av人在线观看网站| 深夜国产福利99亚洲视频| 中文字幕无码精品亚洲资源网| 亚洲综合在线另类色区奇米| 久久精品亚洲综合|