検索
ホームページウェブフロントエンドhtmlチュートリアル史上最も包括的な WebView の使用法には、Html5Activity_html/css_WEB-ITnose のコピーが付属しています。

この記事があなたのお役に立てれば光栄です。お時間を無駄にさせてしまいましたことを深くお詫び申し上げます。

私のような人たちを助けるために、最も簡単な言葉を使いたいと思っています。皆さんと私に誤解を与えないように、間違いがあればご指摘ください。

この記事は http://www.jianshu.com/users/320f9e8f7fc9/latest_articles から引用しました

ご清聴ありがとうございます。

WebView は、現在のプロジェクトでも依然として頻繁に使用されるはずです。

個人的には、HTML5 がトレンドであると常々感じています。いくつか発見したのでここにまとめます。

この記事の最後に非常に優れた Html5Activity 読み込みクラスがあります。見たくない場合は、直接ダウンロードしてください。

WebSettings

WebSettings webSettings = mWebView .getSettings();//支持获取手势焦点,输入用户名、密码或其他webview.requestFocusFromTouch();setJavaScriptEnabled(true);  //支持jssetPluginsEnabled(true);  //支持插件 设置自适应屏幕,两者合用setUseWideViewPort(true);  //将图片调整到适合webview的大小 setLoadWithOverviewMode(true); // 缩放至屏幕的大小setSupportZoom(true);  //支持缩放,默认为true。是下面那个的前提。setBuiltInZoomControls(true); //设置内置的缩放控件。  若上面是false,则该WebView不可缩放,这个不管设置什么都不能缩放。setDisplayZoomControls(false); //隐藏原生的缩放控件setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局  supportMultipleWindows();  //多窗口 setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //关闭webview中缓存 setAllowFileAccess(true);  //设置可以访问文件 setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 setLoadsImagesAutomatically(true);  //支持自动加载图片setDefaultTextEncodingName("utf-8");//设置编码格式

メソッドの読み込み

Web ページの読み込み:

webView.loadUrl(" http:// www .google.com/");

apk パッケージに HTML ページをロードします

webView.loadUrl("file:///android_asset/test.html");

携帯電話にローカル HTML ページをロードする方法:

webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");

WebViewClient

WebViewClient は、WebView がさまざまな通知を処理し、イベントを要求するのに役立ちます。

Web ページを開くとき、システム ブラウザは呼び出されず、この WebView に表示されます。

 mWebView.setWebViewClient(new WebViewClient(){      @Override      public boolean shouldOverrideUrlLoading(WebView view, String url) {          view.loadUrl(url);      return true;      }  });

WebViewClient メソッド

WebViewClient mWebViewClient = new WebViewClient()  {      shouldOverrideUrlLoading(WebView view, String url)  最常用的,比如上面的。    //在网页上的所有加载都经过这个方法,这个函数我们可以做很多操作。    //比如获取url,查看url.contains(“add”),进行添加操作    shouldOverrideKeyEvent(WebView view, KeyEvent event)    //重写此方法才能够处理在浏览器中的按键事件。     onPageStarted(WebView view, String url, Bitmap favicon)     //这个事件就是开始载入页面调用的,我们可以设定一个loading的页面,告诉用户程序在等待网络响应。     onPageFinished(WebView view, String url)    //在页面加载结束时调用。同样道理,我们可以关闭loading 条,切换程序动作。     onLoadResource(WebView view, String url)     // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。     onReceivedError(WebView view, int errorCode, String description, String failingUrl)    // (报告错误信息)     doUpdateVisitedHistory(WebView view, String url, boolean isReload)      //(更新历史记录)     onFormResubmission(WebView view, Message dontResend, Message resend)     //(应用程序重新请求网页数据)     onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)    //(获取返回信息授权请求)     onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)     //重写此方法可以让webview处理https请求。    onScaleChanged(WebView view, float oldScale, float newScale)     // (WebView发生改变时调用)     onUnhandledKeyEvent(WebView view, KeyEvent event)     //(Key事件未被加载时调用) }

上記で定義された WebViewClient は WebView に設定されます:

  webView.setWebViewClient(webViewClient);

WebChromeClient

WebChromeClient は、WebView による Javascript、Web サイトのアイコン、Web サイトのタイトル、読み込みの進行状況などの処理を支援するダイアログ ボックスです。 :

メソッド内のコードは Android 側自体で処理されます。

WebChromeClient mWebChromeClient = new WebChromeClient() {    //获得网页的加载进度,显示在右上角的TextView控件中    @Override    public void onProgressChanged(WebView view, int newProgress) {        if (newProgress < 100) {            String progress = newProgress + "%";        } else {        }    }    //获取Web页中的title用来设置自己界面中的title    //当加载出错的时候,比如无网络,这时onReceiveTitle中获取的标题为 找不到该网页,    //因此建议当触发onReceiveError时,不要使用获取到的title    @Override    public void onReceivedTitle(WebView view, String title) {        MainActivity.this.setTitle(title);    }    @Override    public void onReceivedIcon(WebView view, Bitmap icon) {        //    }    @Override    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {        //        return true;    }    @Override    public void onCloseWindow(WebView window) {    }    //处理alert弹出框,html 弹框的一种方式    @Override    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {        //        return true;    }    //处理confirm弹出框    @Override    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult             result) {        //        return true;    }    //处理prompt弹出框    @Override    public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {        //        return true;    }};

同様に、上で定義した WebChromeClient を WebView に設定します。

  webView.setWebChromeClient(mWebChromeClient);

JS コードを呼び出します

  WebSettings webSettings = mWebView .getSettings();   webSettings.setJavaScriptEnabled(true);   mWebView.addJavascriptInterface(getHtmlObject(), "jsObj");

上記が前提です! ! !

次に、上記のメソッドを実装します。

private Object getHtmlObject(){    Object insertObj = new Object(){        //给html提供的方法,js中可以通过:var str = window.jsObj.HtmlcallJava(); 获取到        public String HtmlcallJava(){            return "Html call Java";        }        //给html提供的有参函数 : window.jsObj.HtmlcallJava2("IT-homer blog");        public String HtmlcallJava2(final String param){            return "Html call Java : " + param;        }        //Html给我们提供的函数        public void JavacallHtml(){            runOnUiThread(new Runnable() {                @Override                public void run() {                    //这里是调用方法                    mWebView.loadUrl("javascript: showFromHtml()");                    Toast.makeText(JSAndroidActivity.this, "clickBtn", Toast.LENGTH_SHORT).show();                }            });        }        //Html给我们提供的有参函数        public void JavacallHtml2(final String param){            runOnUiThread(new Runnable() {                @Override                public void run() {                    mWebView.loadUrl("javascript: showFromHtml2('IT-homer blog')");                    Toast.makeText(JSAndroidActivity.this, "clickBtn2", Toast.LENGTH_SHORT).show();                }            });        }    };    return insertObj;}

Android には js を呼び出す抜け穴があります:

http://blog.csdn.net/leehong2005/article/details/11808557

WebView メソッド

進む、戻る

goBack ()  //后退goForward ()//前进goBackOrForward (int steps) //以当前的index为起始点前进或者后退到历史记录中指定的steps,                                如果steps为负数则为后退,正数则为前进canGoForward ()  //是否可以前进canGoBack () //是否可以后退

キャッシュ データのクリア:

clearCache(true);   //清除网页访问留下的缓存,由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.clearHistory ()  //清除当前webview访问的历史记录,只会webview访问历史记录里的所有记录除了当前访问记录.clearFormData ()  //这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据。

WebView ステータス:

onResume ()  //激活WebView为活跃状态,能正常执行网页的响应onPause ()  //当页面被失去焦点被切换到后台不可见状态,需要执行onPause动过, onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。pauseTimers () //当应用程序被切换到后台我们使用了webview, 这个方法不仅仅针对当前的webview而是全局的全应用程序的webview,它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗。resumeTimers ()  //恢复pauseTimers时的动作。destroy () //销毁,关闭了Activity时,音乐或视频,还在播放。就必须销毁。

ただし、注意: webview 呼び出し破棄されても、Web ビューはアクティビティにバインドされたままになります。これは、カスタム Web ビューの構築時にアクティビティのコンテキスト オブジェクトが渡されるため、最初に Web ビューを親コンテナから削除してから、Web ビューを破棄する必要があるためです。 :

  rootLayout.removeView(webView);    webView.destroy();

WebView がページの一番下までスクロールしたか、ページの一番上までスクロールしたかを判断します:

getScrollY() // このメソッドは、現在のページの一番上までの距離を返します。表示領域とページ全体の上部、つまり現在のコンテンツがスクロールされた距離です。

getHeight() または getBottom() //すべてのメソッドは現在の WebView コンテナの高さを返します

getContentHeight() は HTML 全体の高さを返しますが、現在のページ全体の高さとは異なります。WebView にはズーム機能があるため、ページ全体の現在の高さは実際には元の高さになるはずです。したがって、正しい判断方法は

    if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {        //已经处于底端    }    if(webView.getScrollY() == 0){        //处于顶端    }

戻るキー

最後に閲覧したページに戻る

public boolean onKeyDown(int keyCode, KeyEvent event) {           if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {               mWebView.goBack();               return true;           }           return super.onKeyDown(keyCode, event);       }

非常に優れた Html5Activity ローディング クラスの投稿があります:

package com.lyl.web;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.KeyEvent;import android.webkit.GeolocationPermissions;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import com.lyl.test.R;public class Html5Activity extends AppCompatActivity {    private String mUrl;    private WebView mWebView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web);        Bundle bundle = getIntent().getBundleExtra("bundle");        mUrl = bundle.getString("url");        Log.d("Url:", mUrl);        mWebView = (WebView) findViewById(R.id.web);        WebSettings mWebSettings = mWebView.getSettings();        mWebSettings.setSupportZoom(true);        mWebSettings.setLoadWithOverviewMode(true);        mWebSettings.setUseWideViewPort(true);        mWebSettings.setDefaultTextEncodingName("utf-8");        mWebSettings.setLoadsImagesAutomatically(true);        //调用JS方法.安卓版本大于17,加上注解 @JavascriptInterface        mWebSettings.setJavaScriptEnabled(true);        saveData(mWebSettings);        newWin(mWebSettings);        mWebView.setWebChromeClient(webChromeClient);        mWebView.setWebViewClient(webViewClient);        mWebView.loadUrl(mUrl);    }    /**     * 多窗口的问题     */    private void newWin(WebSettings mWebSettings) {        //html中的_bank标签就是新建窗口打开,有时会打不开,需要加以下        //然后 复写 WebChromeClient的onCreateWindow方法        mWebSettings.setSupportMultipleWindows(true);        mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);    }    /**     * HTML5数据存储     */    private void saveData(WebSettings mWebSettings) {        //有时候网页需要自己保存一些关键数据,Android WebView 需要自己设置        mWebSettings.setDomStorageEnabled(true);        mWebSettings.setDatabaseEnabled(true);        mWebSettings.setAppCacheEnabled(true);        String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();        mWebSettings.setAppCachePath(appCachePath);    }    WebViewClient webViewClient = new WebViewClient(){        /**         * 多页面在同一个WebView中打开,就是不新建activity或者调用系统浏览器打开         */        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {            view.loadUrl(url);            return true;        }    };    WebChromeClient webChromeClient = new WebChromeClient() {        //=========HTML5定位==========================================================        //需要先加入权限        //<uses-permission android:name="android.permission.INTERNET"/>        //<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>        //<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>        @Override        public void onReceivedIcon(WebView view, Bitmap icon) {            super.onReceivedIcon(view, icon);        }        @Override        public void onGeolocationPermissionsHidePrompt() {            super.onGeolocationPermissionsHidePrompt();        }        @Override        public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {            callback.invoke(origin, true, false);//注意个函数,第二个参数就是是否同意定位权限,第三个是是否希望内核记住            super.onGeolocationPermissionsShowPrompt(origin, callback);        }        //=========HTML5定位==========================================================        //=========多窗口的问题==========================================================        @Override        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;            transport.setWebView(mWebView);            resultMsg.sendToTarget();            return true;        }        //=========多窗口的问题==========================================================    };    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {            mWebView.goBack();            return true;        }        return super.onKeyDown(keyCode, event);    }}

すみません、どこから来たのか忘れてしまいました。侵害がある場合は、私に連絡してください。削除します。

これはダウンロードアドレスです: http://yun.baidu.com/s/1eQWFDvG

良いと思ったら、いいねをお願いします。直接、それは本当に光栄なことです。

参考リンク:

Android WebView の使い方詳細解説

Android WebView 開発の詳細解説 (1)

散在もありますリンク。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLの目的:Webブラウザがコンテンツを表示できるようにするHTMLの目的:Webブラウザがコンテンツを表示できるようにするMay 03, 2025 am 12:03 AM

HTMLの中心的な目的は、ブラウザがWebコンテンツを理解して表示できるようにすることです。 1。HTMLは、タグなどのタグを介してWebページの構造とコンテンツを定義します。 3.HTMLは、ユーザーの相互作用をサポートするフォーム要素を提供します。 4. HTMLコードの最適化は、HTTP要求の削減やHTMLの圧縮など、Webページのパフォーマンスを改善できます。

Web開発にとってHTMLタグが重要なのはなぜですか?Web開発にとってHTMLタグが重要なのはなぜですか?May 02, 2025 am 12:03 AM

htmltagsareSterenceforwebdevelovementasyStheStructureanhandhancewebpages.1)theydefineLayout、semantics、and-interactivity.2)semanticagsimprovecessibility.3)opeusofusofagscanoptimizeperformanceandensurecross-brows-compativeation。

HTMLタグと属性に一貫したコーディングスタイルを使用することの重要性を説明します。HTMLタグと属性に一貫したコーディングスタイルを使用することの重要性を説明します。May 01, 2025 am 12:01 AM

コードの読みやすさ、保守性、効率を向上させるため、一貫したHTMLエンコーディングスタイルは重要です。 1)低ケースタグと属性を使用します。2)一貫したインデントを保持し、3)シングルまたはダブルの引用符を選択して固執する、4)プロジェクトのさまざまなスタイルの混合を避け、5)きれいなスタイルやEslintなどの自動化ツールを使用して、スタイルの一貫性を確保します。

ブートストラップ4にマルチプロジェクトカルーセルを実装する方法は?ブートストラップ4にマルチプロジェクトカルーセルを実装する方法は?Apr 30, 2025 pm 03:24 PM

Bootstrap4にマルチプロジェクトカルーセルを実装するソリューションBootstrap4にマルチプロジェクトカルーセルを実装するのは簡単な作業ではありません。ブートストラップですが...

DeepSeekの公式Webサイトは、マウススクロールイベントの浸透の影響をどのように達成していますか?DeepSeekの公式Webサイトは、マウススクロールイベントの浸透の影響をどのように達成していますか?Apr 30, 2025 pm 03:21 PM

マウススクロールイベントの浸透の効果を実現する方法は? Webを閲覧すると、いくつかの特別なインタラクションデザインに遭遇することがよくあります。たとえば、DeepSeekの公式ウェブサイトでは、...

HTMLビデオの再生コントロールスタイルを変更する方法HTMLビデオの再生コントロールスタイルを変更する方法Apr 30, 2025 pm 03:18 PM

HTMLビデオのデフォルトの再生コントロールスタイルは、CSSを介して直接変更することはできません。 1. JavaScriptを使用してカスタムコントロールを作成します。 2。CSSを介してこれらのコントロールを美化します。 3. video.jsやPLYRなどのライブラリを使用すると、互換性、ユーザーエクスペリエンス、パフォーマンスを検討してください。プロセスを簡素化できます。

お使いの携帯電話でネイティブセレクトを使用することにより、どのような問題が発生しますか?お使いの携帯電話でネイティブセレクトを使用することにより、どのような問題が発生しますか?Apr 30, 2025 pm 03:15 PM

携帯電話でネイティブセレクトを使用する際の潜在的な問題は、モバイルアプリケーションを開発するときに、ボックスを選択する必要があることがよくあります。通常、開発者...

お使いの携帯電話でネイティブ選択を使用することの欠点は何ですか?お使いの携帯電話でネイティブ選択を使用することの欠点は何ですか?Apr 30, 2025 pm 03:12 PM

お使いの携帯電話でネイティブ選択を使用することの欠点は何ですか?モバイルデバイスでアプリケーションを開発する場合、適切なUIコンポーネントを選択することが非常に重要です。多くの開発者...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。