Android WebView 精简Demo
生活随笔
收集整理的這篇文章主要介紹了
Android WebView 精简Demo
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
需求
這里放一個(gè)Android WebView的簡(jiǎn)單Demo,不過(guò)這個(gè)Demo是我這邊特別精簡(jiǎn)的,能基本上適用于我這邊大部分的頁(yè)面顯示和功能問(wèn)題,多余的代碼和配置都被我刪掉了;
注釋掉的代碼是不同的情景模式,不做注釋了。
代碼
package zql.h5;import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.webkit.JavascriptInterface; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener {public static final String INTENT_URL = "intent_url";//請(qǐng)求連接 // public static final String INTENT_PARAMS_STRING = "intent_params_string";//請(qǐng)求參數(shù)字符串 // public static final String INTENT_REQUEST_WAY = "intent_request_way";//請(qǐng)求方式(POST/GET)private WebView wvShow;private TextView tv_back_title;private TextView tv_title;private ImageView iv_back;private TextView tv_right;public ValueCallback<Uri[]> uploadMessage;private ValueCallback<Uri> mUploadMessage;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉標(biāo)題欄setContentView(R.layout.activity_main);tv_back_title = (TextView) findViewById(R.id.tv_back_title);tv_title = (TextView) findViewById(R.id.tv_title);iv_back = (ImageView) findViewById(R.id.iv_back);tv_right = (TextView) findViewById(R.id.tv_right);iv_back.setOnClickListener(this);tv_back_title.setOnClickListener(this);tv_right.setOnClickListener(this);initView();initData();}private void initData() {// //外部:GET & POST形式 // String intentUrl = getIntent().getStringExtra(INTENT_URL); // String intentParams = getIntent().getStringExtra(INTENT_PARAMS_STRING); // String intentRequestWay = getIntent().getStringExtra(INTENT_REQUEST_WAY);// Log.e("WebView請(qǐng)求", "連接:" + intentUrl + "....." + "參數(shù):" + intentParams); // // if (intentRequestWay.equals("GET")) { // wvShow.loadUrl(intentUrl + "?" + intentParams);//get請(qǐng)求 // } else if (intentRequestWay.equals("POST")) { // wvShow.postUrl(intentUrl, intentParams.getBytes());//post請(qǐng)求 // } else { // Toast.makeText(MainActivity.this, "請(qǐng)求方式參數(shù)錯(cuò)誤", Toast.LENGTH_SHORT).show(); // }//鏈接wvShow.loadUrl("https://bht.mandao.com/front/#/v2/chb/payment/21ecf0bbe1ee4eb0a8027ff234e7e65c/ASSURE_PAY");//get請(qǐng)求// //Html源碼 // String htmlData = "<!DOCTYPE html>\n" + // "<html>\n" + // "<head>\n" + // " <meta charset=\"utf-8\">\n" + // " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no\">\n" + // " <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n" + // " <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n" + // " <title>修改資料</title>\n" + // " <script src=\"./jquery-1.8.3.js\"></script>\n" + // "</head>\n" + // "\n" + // "<body>\n" + // " <div className=\"image-uploader\">\n" + // " <input id=\"imgInput\" className=\"imgInput\" type=\"file\" accept=\"image/*\" />\n" + // " <img id=\"imgShow\" className=\"imgShow\" />\n" + // " </div>\n" + // "\n" + // "<script> \n" + // " $('#imgInput').change(function () {\n" + // " readURL(this);\n" + // "});\n" + // "\n" + // "function readURL(input){\n" + // " if (input.files && input.files[0]) {\n" + // " const reader = new FileReader();\n" + // " reader.readAsDataURL(input.files[0]);\n" + // " reader.onload = (e) => {\n" + // " $('#imgShow').attr('src', e.target.result);\n" + // " };\n" + // " };\n" + // " };\n" + // "</script>\n" + // "</body>\n" + // "</html>"; // // Log.e("網(wǎng)頁(yè)", htmlData); // // wvShow.loadDataWithBaseURL(null, htmlData, "text/html", "utf-8", null);}private void initView() {wvShow = (WebView) findViewById(R.id.wv_body);wvShow.getSettings().setJavaScriptEnabled(true);//允許與js 交互wvShow.getSettings().setDefaultTextEncodingName("utf-8");//支持中文wvShow.addJavascriptInterface(new JsInterface(this), "androidYZH");//在js中調(diào)用本地java方法(androidYZH這個(gè)是js和安卓之間的約定,js:window.androidYZH.closeH5)wvShow.getSettings().setDomStorageEnabled(true);//允許緩存、開(kāi)啟DOM(雙重重定向白屏問(wèn)題)wvShow.setWebViewClient(new WebViewClient() {//覆蓋shouldOverrideUrlLoading 方法@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (url == null) return false;try {if (url.startsWith("http:") || url.startsWith("https:")) {view.loadUrl(url);return true;} else {//如果不是http和https就用系統(tǒng)瀏覽器打開(kāi)Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));startActivity(intent);return true;}} catch (Exception e) { //防止crash (如果手機(jī)上沒(méi)有安裝處理某個(gè)scheme開(kāi)頭的url的APP, 會(huì)導(dǎo)致crash)return false;}}});wvShow.setWebChromeClient(new WebChromeClient() {//監(jiān)聽(tīng)網(wǎng)頁(yè)加載@Overridepublic void onProgressChanged(WebView view, int newProgress) { // if (newProgress == 100) { // // 網(wǎng)頁(yè)加載完成 // pbProgress.setVisibility(View.GONE); // } else { // // 加載中 // pbProgress.setProgress(newProgress); // }super.onProgressChanged(view, newProgress);}});}@Overridepublic void onClick(View v) {int i = v.getId();if (i == R.id.iv_back) {if (wvShow.canGoBack()) {wvShow.goBack();} else {finish();}} else if (i == R.id.tv_back_title) {finish();}}/*** js調(diào)用原生方法*/private class JsInterface {private Context mContext;public JsInterface(Context context) {this.mContext = context;}@JavascriptInterfacepublic void closeH5(String name) {//關(guān)閉sdkLog.e("網(wǎng)頁(yè)", "方法入?yún)?#xff1a;" + name);finish();}@JavascriptInterfacepublic void downloadFile(String name) {//下載文件Log.e("網(wǎng)頁(yè)", "方法入?yún)?#xff1a;" + name);//這里是把地址用默認(rèn)瀏覽器打開(kāi),在瀏覽器中下載Uri uri = Uri.parse(name);Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.setData(uri);startActivity(intent);}}//重寫(xiě)Activity的onKeyDown事件,判斷當(dāng)用戶按下“返回”按鈕,webview返回上一頁(yè)@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if ((keyCode == KeyEvent.KEYCODE_BACK) && wvShow.canGoBack()) {wvShow.goBack();return true;} else {finish();}return super.onKeyDown(keyCode, event);}}?
總結(jié)
以上是生活随笔為你收集整理的Android WebView 精简Demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: petrel软件中的等值线导出然后加入G
- 下一篇: 阿里软件测试工程师手把手教学:自动化脚本