
我看过很多的webView但一个适合自己的却很少,我忙里偷闲写了一个适合自己的.
//webView父类
public class WebViewActivity extends FragmentActivity{
private WebView mWebView;
private TextView tvTitle;
private WebSettings settings;
private class CallHandler {
@JavascriptInterface
public void getDetail(String arrEntities) {//得数据,从h5得数据方法名
if (arrEntities != null) {
try {
JSONObject object = new JSONObject(arrEntities);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
private class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);// 在当前的webview中跳转到新的url
return true;
}
@Override
public void onPageFinished(WebView view, String url) {//当内核加载完当前页面时会通知我们的应用程序
super.onPageFinished(view, url);
}
}
private class MyWebChromeClient extends WebChromeClient{
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
if (!TextUtils.isEmpty(title)) {//更换标题
tvTitle.setText(title);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
initView();
}
private void initView() {
TextView back= (TextView) findViewById(R.id.tv_activity_webview_back);
tvTitle = (TextView) findViewById(R.id.tv_activity_webview_title);
mWebView = (WebView)findViewById(R.id.wb_webview);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mWebView.canGoBack()) {
mWebView.goBack();
}else {
finish();
}
}
});
mWebView.addJavascriptInterface(new CallHandler(), "callHandler");//与JS交互
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.setWebChromeClient(new MyWebChromeClient());
settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
if (getIntent() != null) {
String url = getIntent().getStringExtra("webViewUrl");//网址
if (url != null) {
mWebView.loadUrl(url);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
settings=null;
mWebView.destroy();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {//监听返回键
if (keyCode == event.KEYCODE_BACK) {
if (mWebView.canGoBack()) {
mWebView.goBack();
}else {
finish();
}
}
return true;
}
public void androidCallJs(final String orderStatus) {//异步传数据
mWebView.post(new Runnable() {
@Override
public void run() {
JSONObject json = new JSONObject();
mWebView.loadUrl("javascript:getBack(' "+ json.toString() +" ')");
}
});
}
}