package name.caiyao.microreader.ui.activity; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.widget.NestedScrollView; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import java.lang.reflect.InvocationTargetException; import butterknife.BindView; import butterknife.ButterKnife; import name.caiyao.microreader.R; import name.caiyao.microreader.utils.NetWorkUtil; public class WeixinNewsActivity extends BaseActivity { @BindView(R.id.wv_weixin) WebView wvWeixin; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.pb_web) ProgressBar pbWeb; @BindView(R.id.fabButton) FloatingActionButton fabButton; @BindView(R.id.nest) NestedScrollView nest; String url; String title; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_weixin_news); ButterKnife.bind(this); url = getIntent().getStringExtra("url"); title = getIntent().getStringExtra("title"); toolbar.setTitle(title); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { WeixinNewsActivity.this.onBackPressed(); } }); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } fabButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nest.smoothScrollTo(0, 0); } }); setToolBar(fabButton, toolbar, true, true, null); overridePendingTransition(R.anim.zoomin, R.anim.zoomout); WebSettings webSettings = wvWeixin.getSettings(); if (!NetWorkUtil.isNetWorkAvailable(this)) webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); else webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setDomStorageEnabled(true); webSettings.setDatabaseEnabled(true); webSettings.setBuiltInZoomControls(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } webSettings.setAppCachePath(getCacheDir().getAbsolutePath() + "/webViewCache"); webSettings.setAllowFileAccess(true); webSettings.setAppCacheEnabled(true); webSettings.setLoadWithOverviewMode(true); wvWeixin.setWebViewClient(new WebViewClient() { @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String urlTo) { //处理自动跳转到浏览器的问题 view.loadUrl(urlTo); return true; } }); wvWeixin.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (pbWeb != null) { if (newProgress == 100) { pbWeb.setVisibility(View.GONE); } else { if (pbWeb.getVisibility() == View.GONE) { pbWeb.setVisibility(View.VISIBLE); } pbWeb.setProgress(newProgress); } } super.onProgressChanged(view, newProgress); } //显示全屏按钮 private View myView = null; private CustomViewCallback myCallback = null; @Override public void onShowCustomView(View view, CustomViewCallback callback) { if (myCallback != null) { myCallback.onCustomViewHidden(); myCallback = null; return; } ViewGroup parent = (ViewGroup) wvWeixin.getParent(); parent.removeView(wvWeixin); parent.addView(view); myView = view; myCallback = callback; } @Override public void onHideCustomView() { if (myView != null) { if (myCallback != null) { myCallback.onCustomViewHidden(); myCallback = null; } ViewGroup parent = (ViewGroup) myView.getParent(); parent.removeView(myView); parent.addView(wvWeixin); myView = null; } } @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { result.confirm(); return super.onJsAlert(view, url, message, result); } }); wvWeixin.loadUrl(url); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_share, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && wvWeixin.canGoBack()) { wvWeixin.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_share: Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, title + " " + url + getString(R.string.share_tail)); shareIntent.setType("text/plain"); //设置分享列表的标题,并且每次都显示分享列表 startActivity(Intent.createChooser(shareIntent, getString(R.string.share))); break; case R.id.action_use_browser: startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); break; } return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); try { wvWeixin.getClass().getMethod("onResume").invoke(wvWeixin, (Object[]) null); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } @Override protected void onPause() { super.onPause(); try { wvWeixin.getClass().getMethod("onPause").invoke(wvWeixin, (Object[]) null); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (wvWeixin != null) { ((ViewGroup) wvWeixin.getParent()).removeView(wvWeixin); wvWeixin.destroy(); wvWeixin = null; } } @Override public void finish() { super.finish(); overridePendingTransition(R.anim.zoomin, R.anim.zoomout); } }