Android WebViewコンポーネント使用概要
5473 ワード
ブラウザコントロールは開発環境ごとに備えられており、これはベスト神功に役立つ場所を提供し、windowsにはwebbrowserがあり、androidとiosにはwebviewがある.ただそのエンジンは異なり、マイクロソフトのwebbrowserに対してandroidやiosのwebviewのエンジンはすべてwebkitであり、Html 5をサポートしている.本編では主にandroidのwebviewの強さを紹介します.
Webviewコンポーネントの使用方法
1)追加権限:AndroidManifest.xmlではライセンス「android.permission.INTERNET」を使用する必要があります.そうしないと、Web page not availableエラーが発生します.
2)ActivityでWebViewコンポーネントを生成する:WebView=new WebView(this);またはactivityのlayoutファイルにwebviewコントロールを追加できます.
3)WebView基本情報の設定:
アクセスしたページにJavascriptがある場合は、webviewがJavascriptをサポートするように設定する必要があります.
webview.getSettings().setJavaScriptEnabled(true);
タッチフォーカスが働く
requestFocus();
スクロールバーのキャンセル
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4)Webビューで表示するWebページを設定します.
インターネット用:webView.loadUrl("http://www.google.com");
ローカルファイル用:webView.loadUrl("file:///android_asset/XX.html");ローカルファイルは:assetsファイルに保存されます.
5)Androidを新しくオープンしたシステムではなく、リンクをクリックしたい場合は自分で処理する.WebViewにイベントリスナー(WebView Client)を追加し、その中のいくつかの方法を書き換えます.
shouldOverrideUrlLoading:Webページのハイパーリンクボタンへの応答.接続を押すと、WebViewClientはこのメソッドを呼び出し、パラメータ:urlを渡します.例えば、webviewに埋め込まれたページの数字がクリックされると、url:tel:123が渡される電話要求だと自動的に認識されます.shouldOverrideUrlLoading関数を書き換えることで解決したくない場合は、次のようになります.
他にも書き換える方法があります
1,Http要求を受信したイベント
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
2,リンクを開く前のイベント
public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
この関数は、特定のURLを読み取るなど、多くの操作を行うことができます.そこで、アドレスを開かずに、この操作をキャンセルして、事前に定義された他の操作を行うことができます.これはプログラムにとって非常に必要です.
3ページの読み込みが完了したイベント
public void onPageFinished(WebView view, String url){ }
同様に、ページの読み込みが完了したことを知っています.loadingバーを閉じて、プログラムの動作を切り替えることができます.
4ページの読み込み開始イベント
public void onPageStarted(WebView view, String url, Bitmap favicon) { }
このイベントはページ呼び出しのロードを開始し、通常、loadingのページを設定して、ユーザープログラムがネットワーク応答を待っていることをユーザーに伝えることができます.
これらのイベントにより、プログラムの操作を簡単に制御し、ブラウザでコンテンツを表示しながら、ユーザーの操作を監視して、私たちが必要とする様々な表示方式を実現し、ユーザーの誤操作を防止することができます.
6)ウェブビューポイントリンクで多くのページを見た後、何の処理もしないでシステム「Back」キーをクリックすると、ブラウザ全体がfinish()を呼び出して自身を終了し、ブラウザを終了するのではなく、閲覧したいページが戻る場合は、現在のActivityでこのBackイベントを処理し消費する必要があります.
Activityクラスを上書きするonKeyDown(int keyCoder,KeyEvent event)メソッド.
Webviewとjsのインタラクション
Webviewとjsの双方向インタラクションこそandroidのwebviewの強さであり、ベスト精神が徹底的に実行できる基礎保障でもある.
まず、webviewは、その埋め込みページでトリガーできるイベントを定義することができます.
以上のコードにより、その埋め込みページにおいてwindowをトリガことが可能となる.demo.clickOnAndroid(str)イベントは、パラメータstrをwebviewに送信します.Webviewはstrを受信した後、上記のコードによってその埋め込みページのjs関数wave(str)をトリガすることができる.これにより、ウェブページがウェブビューのイベントをトリガしてパラメータを伝達し、ウェブビューがパラメータを受信してjs関数を呼び出すことができる.
私のHtmlスクリプトを見てみましょう.
スクリプトからwave(str)関数が表示されるのは、元のwebviewに渡されたデータをページに戻す責任を負い、効果図は以下の通りです.
また、ページの処理データを取得してwebviewクライアントに渡す場合は、wave関数でデータalertを作成し、webviewでWebChromeClientのonJsAlert関数を書き換えることができます.具体的なコードは次のとおりです.
wv.setWebChromeClient(new MyWebChromeClient());
Webviewコンポーネントの使用方法
1)追加権限:AndroidManifest.xmlではライセンス「android.permission.INTERNET」を使用する必要があります.そうしないと、Web page not availableエラーが発生します.
2)ActivityでWebViewコンポーネントを生成する:WebView=new WebView(this);またはactivityのlayoutファイルにwebviewコントロールを追加できます.
android:id="@+id/wv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"
/>
3)WebView基本情報の設定:
アクセスしたページにJavascriptがある場合は、webviewがJavascriptをサポートするように設定する必要があります.
webview.getSettings().setJavaScriptEnabled(true);
タッチフォーカスが働く
requestFocus();
スクロールバーのキャンセル
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4)Webビューで表示するWebページを設定します.
インターネット用:webView.loadUrl("http://www.google.com");
ローカルファイル用:webView.loadUrl("file:///android_asset/XX.html");ローカルファイルは:assetsファイルに保存されます.
5)Androidを新しくオープンしたシステムではなく、リンクをクリックしたい場合は自分で処理する.WebViewにイベントリスナー(WebView Client)を追加し、その中のいくつかの方法を書き換えます.
shouldOverrideUrlLoading:Webページのハイパーリンクボタンへの応答.接続を押すと、WebViewClientはこのメソッドを呼び出し、パラメータ:urlを渡します.例えば、webviewに埋め込まれたページの数字がクリックされると、url:tel:123が渡される電話要求だと自動的に認識されます.shouldOverrideUrlLoading関数を書き換えることで解決したくない場合は、次のようになります.
public boolean shouldOverrideUrlLoading(WebView view,String url){
if(url.indexOf("tel:")<0){//
view.loadUrl(url);
}
return true;
}
他にも書き換える方法があります
1,Http要求を受信したイベント
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
2,リンクを開く前のイベント
public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
この関数は、特定のURLを読み取るなど、多くの操作を行うことができます.そこで、アドレスを開かずに、この操作をキャンセルして、事前に定義された他の操作を行うことができます.これはプログラムにとって非常に必要です.
3ページの読み込みが完了したイベント
public void onPageFinished(WebView view, String url){ }
同様に、ページの読み込みが完了したことを知っています.loadingバーを閉じて、プログラムの動作を切り替えることができます.
4ページの読み込み開始イベント
public void onPageStarted(WebView view, String url, Bitmap favicon) { }
このイベントはページ呼び出しのロードを開始し、通常、loadingのページを設定して、ユーザープログラムがネットワーク応答を待っていることをユーザーに伝えることができます.
これらのイベントにより、プログラムの操作を簡単に制御し、ブラウザでコンテンツを表示しながら、ユーザーの操作を監視して、私たちが必要とする様々な表示方式を実現し、ユーザーの誤操作を防止することができます.
6)ウェブビューポイントリンクで多くのページを見た後、何の処理もしないでシステム「Back」キーをクリックすると、ブラウザ全体がfinish()を呼び出して自身を終了し、ブラウザを終了するのではなく、閲覧したいページが戻る場合は、現在のActivityでこのBackイベントを処理し消費する必要があります.
Activityクラスを上書きするonKeyDown(int keyCoder,KeyEvent event)メソッド.
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
webview.goBack(); //goBack() webView
return true;
}
return false;
}
Webviewとjsのインタラクション
Webviewとjsの双方向インタラクションこそandroidのwebviewの強さであり、ベスト精神が徹底的に実行できる基礎保障でもある.
まず、webviewは、その埋め込みページでトリガーできるイベントを定義することができます.
wv.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
private final class DemoJavaScriptInterface
{
DemoJavaScriptInterface(){}
public void clickonAndroid( final String order){
mHandler.post(newRunnable(){
@Override
public void run(){
jsonText="{"name":""+order+""}";
wv.loadUrl("javascript:wave("+jsonText+")");
}
});
}
}
以上のコードにより、その埋め込みページにおいてwindowをトリガことが可能となる.demo.clickOnAndroid(str)イベントは、パラメータstrをwebviewに送信します.Webviewはstrを受信した後、上記のコードによってその埋め込みページのjs関数wave(str)をトリガすることができる.これにより、ウェブページがウェブビューのイベントをトリガしてパラメータを伝達し、ウェブビューがパラメータを受信してjs関数を呼び出すことができる.
私のHtmlスクリプトを見てみましょう.
Insert title here
<br>function toclient()
<br>{
<br>var order=$("#val").val();
<br>window.demo.clickonAndroid(order);
<br>}
<br>function wave(str){
<br>//alert(str.name);
<br>$("#fromclient").text(str.name);
<br>}
<br>
html
:
onclick="toclient();"/>
:
スクリプトからwave(str)関数が表示されるのは、元のwebviewに渡されたデータをページに戻す責任を負い、効果図は以下の通りです.
また、ページの処理データを取得してwebviewクライアントに渡す場合は、wave関数でデータalertを作成し、webviewでWebChromeClientのonJsAlert関数を書き換えることができます.具体的なコードは次のとおりです.
wv.setWebChromeClient(new MyWebChromeClient());
final class MyWebChromeClient extends WebChromeClient{
@Override
public booleanonJsAlert(WebView view, String url, String message, final JsResult result) {
//message wave alert , android
result.confirm();
}
return true;
}