private LinearLayout layout_web;
private WebView mWebView;
layout_web=findViewById(R.id.layout_web);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
webView=findViewById(R.id.history_detail_webview);
// webView.loadUrl("https://www.hao123.com/");
//加载网页时,只在webview中显示,如果不进行设置,加载网页时就会跳到浏览器进行页面显示;
//加载本地html时,有无设置均在webview中显示
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
webView.setLayoutParams(params);
WebSettings webSettings=webView.getSettings();
if (isNetworkAvailable(this)) {
// 根据cache-control决定是否从网络上获取数据
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
} else {
// 没网,则从本地获取,即离线加载(原来打开过的网页,打开时会再次显示)
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
webView.loadUrl("https://www.hao123.com/");
这篇文章比较详实
https://www.jianshu.com/p/0d6dd9f9594f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
跳转手机浏览器:
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(Urltils.HostoryUrl+pointsMallEntities.get(position).getTranscation_hash());
intent.setData(content_url);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
查阅资料,手机上,网路改变的时候,系统都会发送广播通知,所以可以通过广播控件来捕捉改变,再改变的时候,获取一下网络状态,然后通过接口去完成相关操作,广播平时写得少,再写一下加深印象。
public class NetWorkBroadcastReciver extends BroadcastReceiver {
private static final String TAG="NetWorkBroadcastReciver";
@Override
public void onReceive(Context context, Intent intent) {
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())){
// do something
Log.e(TAG, "onReceive: " +intent.getAction());
Log.e(TAG, "onReceive getnetworkType: " +NetworkUtils.isAvailable(context));
}
}
}
//这个可以在最早的activity中或者application中进行注册
registerReceiver(this,new NetWorkBroadcastReciver());
//这里的new NetWorkBroadcastReciver,是接收到的广播,就是哪个广播的onReceive调用;
public static void registerReceiver(Context context,NetWorkBroadcastReciver broadcast){
IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
context.registerReceiver( broadcast,intentFilter);
}
交互及优雅回收webview:
public class WebViewActivity extends BaseActivity {
private String url = "https://app-h5test.zhangxinzhixun.com/cleaning/ClearInstructions";
private LinearLayout layout;
private WebView webView;
private String type;
@Override
public int layoutID() {
return R.layout.activity_webview;
}
@Override
public void init() {
type=getIntent().getStringExtra("type");
layout = findViewById(R.id.activity_webview_layout);
initWebView();
initTitle();
}
private void initWebView() {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
WebView webView = new WebView(this);
//设置WebView的宽高
webView.setLayoutParams(layoutParams);
//把webView添加到容器中
layout.addView(webView);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
// webView.getSettings().setDefaultFontSize(56);
// webView.getSettings().setMinimumFontSize(40);//设置最小字体
// 建议禁止缓存加载,以确保在攻击发生时可快速获取最新的滑动验证组件进行对抗。
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
// 设置不使用默认浏览器,而直接使用WebView组件加载页面。
// 设置WebView组件支持加载JavaScript。
webView.getSettings().setJavaScriptEnabled(true);
// 建立JavaScript调用Java接口的桥梁。
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.addJavascriptInterface(new Contact() {
@JavascriptInterface
@Override
public void getWechatApi() {
JumpUtils.INSTANCE.getWechatApi();
}
}, "Android");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.loadUrl(url);
// webView.loadDataWithBaseURL(null, url, "text/html", "utf-8", null);//解决乱码问题
}
@Override
public void onClick(View view) {
}
private void initTitle() {
TextView tv_title = findViewById(R.id.base_title_name);
LinearLayout layout = findViewById(R.id.base_layout);
View view = findViewById(R.id.base_view);
ImageView img = findViewById(R.id.base_img_back);
img.setVisibility(View.VISIBLE);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
img.setBackgroundResource(0);
img.setBackgroundResource(R.drawable.tt_lefterbackicon_titlebar_press);
// view.setVisibility(View.GONE);
if (type.equals("0")){
tv_title.setText("微信专清");
}else if (type.equals("1")){
tv_title.setText("QQ专清");
}
// layout.setBackgroundResource(R.color.wchat_detail_green_color);
// tv_title.setText("QQ专清");
// layout.setBackgroundResource(R.color.wchat_detail_qq_blue_color);
// tv_title.setTextColor(getResources().getColor(R.color.white));
}
@Override
protected void onDestroy() {
super.onDestroy();
if (webView != null) {
webView.clearView();
webView.removeAllViews();
webView.destroy();
webView = null;
layout.removeView(webView);
}
}
interface Contact {
//供html/JavaScript调用
@JavascriptInterface
void getWechatApi();
}
}