package com.application.zhangshi_app_android.ui; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.text.TextUtils; import android.util.Base64; import android.view.KeyEvent; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import androidx.annotation.NonNull; import com.android.app_base.base.dialog.BaseDialog; import com.android.app_base.base.dialog.WaitDialog; import com.android.app_base.base.view.BaseActivity; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.databinding.ActivityBrowserBinding; import com.hjq.bar.TitleBar; import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.listener.OnRefreshListener; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; /** * @author Ljj * @date 2023.10.15. 22:36 * @desc 浏览器界面 */ public class BrowserActivity extends DLBaseActivity { private static final String INTENT_URL = "url"; private String url; private BaseDialog mWaitDialog; @Override protected boolean isDrawerLayoutEnabled() { return false; } public static void start(Context context, String url) { if (TextUtils.isEmpty(url)) { return; } Intent intent = new Intent(context, BrowserActivity.class); intent.putExtra(INTENT_URL, url); if (!(context instanceof Activity)) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } context.startActivity(intent); } @Override public int getLayoutId() { return R.layout.activity_browser; } @Override public int getVariableId() { return 0; } @Override public void initParam() { url = getIntent().getStringExtra(INTENT_URL); } @Override public void initView() { binding.slBrowserRefresh.setEnableRefresh(true); binding.slBrowserRefresh.setEnableLoadMore(false); binding.slBrowserRefresh.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { binding.wvBrowserView.reload(); } }); WebSettings webSettings = binding.wvBrowserView.getSettings(); webSettings.setJavaScriptEnabled(true); // 启用JavaScript webSettings.setBuiltInZoomControls(true); // 启用内置的缩放控件 webSettings.setDisplayZoomControls(false); // 隐藏缩放按钮 webSettings.setSupportZoom(true); // 启用缩放 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小 webSettings.setUseWideViewPort(true); // 启用支持视窗 binding.wvBrowserView.setWebViewClient(new WebViewClient(){ /** * 开始加载网页 */ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { binding.pbBrowserProgress.setVisibility(View.VISIBLE); } /** * 完成加载网页 */ @Override public void onPageFinished(WebView view, String url) { binding.pbBrowserProgress.setVisibility(View.GONE); binding.slBrowserRefresh.finishRefresh(); dialogDismiss(); } }); binding.wvBrowserView.setWebChromeClient(new WebChromeClient(){ /** * 收到网页标题 */ @Override public void onReceivedTitle(WebView view, String title) { if (title == null) { return; } binding.tbBrowserTitle.setTitle(title); } @Override public void onReceivedIcon(WebView view, Bitmap icon) { if (icon == null) { return; } // setRightIcon(new BitmapDrawable(getResources(), icon)); } /** * 收到加载进度变化 */ @Override public void onProgressChanged(WebView view, int newProgress) { binding.pbBrowserProgress.setProgress(newProgress); } }); } @Override public void initData() { dialogLoading(); binding.wvBrowserView.loadUrl(url); } @Override public void initLiveDataObserve() { } @Override public void onLeftClick(TitleBar titleBar) { finish(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && binding.wvBrowserView.canGoBack()) { // 后退网页并且拦截该事件 binding.wvBrowserView.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override protected void dialogLoading() { if (mWaitDialog == null) { mWaitDialog = new WaitDialog.Builder(this) .create(); mWaitDialog.setCancelable(true); } if (!mWaitDialog.isShowing()) { mWaitDialog.show(); } } @Override protected void dialogDismiss() { if (mWaitDialog != null && mWaitDialog.isShowing()) { mWaitDialog.dismiss(); mWaitDialog = null; } } }