Android WebViewの使い方のまとめ
8338 ワード
Android WebViewの使い方
Android app H 5ページを開くと、一般的に次のような需要があります.
1、指定されたurlページを開く.2、リンクをクリックすると次のページに進み、タイトルを更新することができます.3、backキーまたは左矢印を押すと前のページに戻ります.4、webviewが第1レベルurlであると表示された場合、リターンキーまたは左矢印を押して現在のインターフェースを閉じます.5、WebViewはどうやってandroidに値を伝えますか?例えばH 5を使ってログインしたら名前、tokenなどのフィールドに戻ります.6、JavaScriptをサポートし、jsダイアログの表示をサポートします.7、ネットワークがない時はデフォルトのレイアウトを表示し、ユーザーの体験を高める.8、WebViewのメモリ漏れを避ける.
多くは言いません.下記のコードを見て、上記の機能を実現します.
参考レイアウト:
Android app H 5ページを開くと、一般的に次のような需要があります.
1、指定されたurlページを開く.2、リンクをクリックすると次のページに進み、タイトルを更新することができます.3、backキーまたは左矢印を押すと前のページに戻ります.4、webviewが第1レベルurlであると表示された場合、リターンキーまたは左矢印を押して現在のインターフェースを閉じます.5、WebViewはどうやってandroidに値を伝えますか?例えばH 5を使ってログインしたら名前、tokenなどのフィールドに戻ります.6、JavaScriptをサポートし、jsダイアログの表示をサポートします.7、ネットワークがない時はデフォルトのレイアウトを表示し、ユーザーの体験を高める.8、WebViewのメモリ漏れを避ける.
多くは言いません.下記のコードを見て、上記の機能を実現します.
参考レイアウト:
サンプルコード:
public class CommonWebViewActivity extends Activity {
private WebView mWebView;
private TitleView mTitleView;
private RelativeLayout mWebViewContainer;
private String title;
private String url;
private LinearLayout neterrorLayout;
private int mFlag; //
public static final int FLAG_SIGNATURE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common_webview_main);
initData();
initView();
setData();
}
@Override
protected void onDestroy() {
super.onDestroy();
mWebView.setWebViewClient(null);
mWebView.setWebChromeClient(null);
mWebViewContainer.removeView(mWebView);
mWebView.removeAllViews();
mWebView.destroy();
}
private void initData() {
url = getIntent().getStringExtra("url");
title = getIntent().getStringExtra("title");
mFlag = getIntent().getIntExtra("flag", 0);
}
private void initView() {
mTitleView = (TitleView) findViewById(R.id.titleView);
mWebViewContainer = (RelativeLayout) findViewById(R.id.rl_webViewContainer);
neterrorLayout = (LinearLayout) findViewById(R.id.neterror_tip);
mWebView = new WebView(getApplicationContext());
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
mWebViewContainer.addView(mWebView, layoutParams);
WebSettings webSettings = mWebView.getSettings();
// WebView , Javascript
webSettings.setJavaScriptEnabled(true);
//
webSettings.setAllowFileAccess(true);
//
webSettings.setBuiltInZoomControls(false);
// js
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
mTitleView.setLeftBtnClickListener(new TitleView.OnBtnClickListener() {
@Override
public void onClick(View v) {
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
finish();
}
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
private void setData() {
mTitleView.setTitle(title);
mWebView.loadUrl(url);
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, final String message, final JsResult result) {
// ,WebView JavaScript Alert, Android 。
runOnUiThread(new Runnable() {
@Override
public void run() {
// Dialog, message
CustomDialog.Builder builder = new CustomDialog.Builder(CommonWebViewActivity.this);
builder.setTitle(" ");
builder.setMessage(message);
builder.setSingle(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
builder.create().show();
}
});
result.confirm();// ,
return true;
}
@Override
public void onReceivedTitle(final WebView view, final String title) {
super.onReceivedTitle(view, title);
if (FLAG_SIGNATURE == mFlag) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTitleView.setTitle(title);
}
});
}
}
});
mWebView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (FLAG_SIGNATURE == mFlag) {
Log.d("brycegao", "shouldInterceptRequest url:" + request.getUrl().toString());
if (request.getUrl().toString().contains("wxd://getImage?tenderid=")) {
// url Android, url
runOnUiThread(new Runnable() {
@Override
public void run() {
setResult(RESULT_OK);
finish();
}
});
}
}
return super.shouldInterceptRequest(view, request);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
mWebView.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
if (FLAG_SIGNATURE == mFlag
&& request.getUrl().toString().contains("wxd://getImage?tenderid=")) {
//do nothing
mWebView.setVisibility(View.GONE); // ,
} else {
//
neterrorLayout.setVisibility(View.VISIBLE);
mWebView.setVisibility(View.GONE);
}
}
});
neterrorLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mWebView.setVisibility(View.VISIBLE);
neterrorLayout.setVisibility(View.GONE);
mWebView.loadUrl(url);
}
});
}
}
以上はAndroid Webviewの使い方です.質問があれば、メッセージで討論したり、当サイトのコミュニティで交流したりします.ありがとうございます.読んでください.助けてください.ありがとうございます.