package name.caiyao.microreader.ui.activity; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.widget.NestedScrollView; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.ImageView; import java.lang.reflect.InvocationTargetException; import butterknife.BindView; import butterknife.ButterKnife; import name.caiyao.microreader.R; import name.caiyao.microreader.bean.guokr.GuokrArticle; import name.caiyao.microreader.bean.zhihu.ZhihuStory; import name.caiyao.microreader.config.Config; import name.caiyao.microreader.presenter.IZhihuStoryPresenter; import name.caiyao.microreader.presenter.impl.ZhihuStoryPresenterImpl; import name.caiyao.microreader.ui.iView.IZhihuStory; import name.caiyao.microreader.utils.ImageLoader; import name.caiyao.microreader.utils.WebUtil; public class ZhihuStoryActivity extends BaseActivity implements IZhihuStory { public static final int TYPE_ZHIHU = 1; public static final int TYPE_GUOKR = 2; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.wv_zhihu) WebView wvZhihu; @BindView(R.id.iv_zhihu_story) ImageView ivZhihuStory; @BindView(R.id.ctl) CollapsingToolbarLayout ctl; @BindView(R.id.nest) NestedScrollView nest; @BindView(R.id.fabButton) FloatingActionButton fabButton; private int type; private String id; private String title; private String url; private IZhihuStoryPresenter mIZhihuStoryPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_zhihu_story); ButterKnife.bind(this); initData(); initView(); getData(); } private void initData() { type = getIntent().getIntExtra("type", 0); id = getIntent().getStringExtra("id"); title = getIntent().getStringExtra("title"); mIZhihuStoryPresenter = new ZhihuStoryPresenterImpl(this); } private void initView() { toolbar.setTitle(title); setSupportActionBar(toolbar); boolean isKitKat = Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT; int vibrantColor = setToolBar(fabButton, toolbar, false, isKitKat, null); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ZhihuStoryActivity.this.onBackPressed(); } }); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } fabButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { nest.smoothScrollTo(0, 0); } }); WebSettings settings = wvZhihu.getSettings(); settings.setJavaScriptEnabled(true); settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true); //settings.setUseWideViewPort(true);造成文字太小 settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setAppCachePath(getCacheDir().getAbsolutePath() + "/webViewCache"); settings.setAppCacheEnabled(true); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); wvZhihu.setWebChromeClient(new WebChromeClient()); ctl.setContentScrimColor(vibrantColor); ctl.setBackgroundColor(vibrantColor); ctl.setStatusBarScrimColor(vibrantColor); } private void getData() { if (type == TYPE_ZHIHU) { mIZhihuStoryPresenter.getZhihuStory(id); } else if (type == TYPE_GUOKR) { mIZhihuStoryPresenter.getGuokrArticle(id); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_share, menu); menu.findItem(R.id.action_share).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.removeItem(R.id.action_use_browser); return super.onCreateOptionsMenu(menu); } @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; } return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); try { wvZhihu.getClass().getMethod("onResume").invoke(wvZhihu, (Object[]) null); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } @Override protected void onPause() { super.onPause(); try { wvZhihu.getClass().getMethod("onPause").invoke(wvZhihu, (Object[]) null); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } @Override protected void onDestroy() { //webview内存泄露 if (wvZhihu != null) { ((ViewGroup) wvZhihu.getParent()).removeView(wvZhihu); wvZhihu.destroy(); wvZhihu = null; } mIZhihuStoryPresenter.unsubcrible(); super.onDestroy(); } @Override public void showError(String error) { Snackbar.make(wvZhihu, getString(R.string.common_loading_error) + error, Snackbar.LENGTH_INDEFINITE).setAction(getString(R.string.comon_retry), new View.OnClickListener() { @Override public void onClick(View v) { getData(); } }).show(); } @Override public void showZhihuStory(ZhihuStory zhihuStory) { ImageLoader.loadImage(ZhihuStoryActivity.this,zhihuStory.getImage(),ivZhihuStory); url = zhihuStory.getShareUrl(); if (TextUtils.isEmpty(zhihuStory.getBody())) { wvZhihu.loadUrl(zhihuStory.getShareUrl()); } else { String data = WebUtil.buildHtmlWithCss(zhihuStory.getBody(), zhihuStory.getCss(), Config.isNight); wvZhihu.loadDataWithBaseURL(WebUtil.BASE_URL, data, WebUtil.MIME_TYPE, WebUtil.ENCODING, WebUtil.FAIL_URL); } } @Override public void showGuokrArticle(GuokrArticle guokrArticle) { ImageLoader.loadImage(ZhihuStoryActivity.this,guokrArticle.getResult().getSmallImage(),ivZhihuStory); url = guokrArticle.getResult().getUrl(); if (TextUtils.isEmpty(guokrArticle.getResult().getContent())) { wvZhihu.loadUrl(guokrArticle.getResult().getUrl()); } else { //解决图片显示问题,视频显示问题 String data = WebUtil.buildHtmlForIt(guokrArticle.getResult().getContent().replaceAll("(style.*?\")>", "").replaceAll("width=\"(.*?)\"", "100%").replaceAll("height=\"(.*?)\"", "auto"), Config.isNight); wvZhihu.loadDataWithBaseURL(WebUtil.BASE_URL, data, WebUtil.MIME_TYPE, WebUtil.ENCODING, WebUtil.FAIL_URL); } } }