android webview gone,Android WebView的使用方法总结

Android WebView的使用方法

Android app打开H5页一般要实现如下需求:

1、打开指定url网页;

2、点击链接可以跳转到下一页,并更新标题;

3、按back键或左箭头可以返回上一页;

4、当webview显示的是第一级url时, 按返回键或左箭头关闭当前界面;

5、WebView如何传值给android, 例如使用H5登录成功后返回姓名、token等等字段。

6、支持JavaScript, 支持显示js对话框。

7、无网络时显示默认布局, 以提高用户体验。

8、避免WebView的内存泄漏。

不多说, 看下面代码如何实现上述功能。

参考布局:

xmlns:my="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/activity_main_bg"

android:orientation="vertical">

android:id="@+id/titleView"

android:layout_width="match_parent"

android:layout_height="50dp"

my:titleText="H5" />

android:id="@+id/rl_webViewContainer"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/neterror_tip"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center_horizontal"

android:visibility="gone">

android:layout_marginTop="110dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/not_found" />

示例代码:

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的使用方法详解,大家如果有疑问可以留言讨论,或者到本站社区交流,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Android WebView的用法大全: 1. 在XML布局文件中添加WebView组件 ``` <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 2. 在Java代码中获取WebView组件并设置WebViewClient ``` WebView webView = findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient()); ``` 3. 加载网页 ``` webView.loadUrl("https://www.example.com"); ``` 4. 后退和前进 ``` if(webView.canGoBack()) { webView.goBack(); } if(webView.canGoForward()) { webView.goForward(); } ``` 5. 加载本地HTML页面 ``` webView.loadUrl("file:///android_asset/index.html"); ``` 6. 设置JavaScript支持 ``` webView.getSettings().setJavaScriptEnabled(true); ``` 7. 设置缩放 ``` webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setDisplayZoomControls(false); ``` 8. 处理网页中的URL ``` webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.startsWith("mailto:")) { Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url)); startActivity(intent); return true; } view.loadUrl(url); return true; } }); ``` 9. 拦截网页中的请求 ``` webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { if(request.getUrl().toString().endsWith(".png")) { try { InputStream inputStream = getAssets().open("image.png"); return new WebResourceResponse("image/png", "UTF-8", inputStream); } catch (IOException e) { e.printStackTrace(); } } return super.shouldInterceptRequest(view, request); } }); ``` 10. 处理页面加载事件 ``` webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { progressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { progressBar.setVisibility(View.GONE); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { Toast.makeText(MainActivity.this, "Error: " + error.getDescription(), Toast.LENGTH_SHORT).show(); } }); ``` 11. 调用JavaScript代码 ``` webView.loadUrl("javascript:alert('Hello, world!')"); ``` 12. 与JavaScript交互 ``` webView.addJavascriptInterface(new Object() { @JavascriptInterface public void showToast(String message) { Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); } }, "android"); ``` 以上是Android WebView的用法大全,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值