项目结构:
代码:
MainActivity
activity_main.xmlpackage com.zhh.mytestwebview; import android.app.Activity; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.webkit.WebBackForwardList; import android.webkit.WebChromeClient; import android.webkit.WebHistoryItem; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; public class MainActivity extends Activity { private WebView wvShowDetails; private ProgressBar pbComplete; // 比分直播 private String rootUrl = "http://m.zhcw.com/zixun/live.jsp?type=sp"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wvShowDetails = findViewById(R.id.wvShowDetails); pbComplete = findViewById(R.id.pbComplete); setWebView(rootUrl); myOnclick(); } /** * 加载webView的方法 */ private void setWebView(String url) { // 对webView的设置 WebSettings webSettings = wvShowDetails.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); // 设置进度条 wvShowDetails.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if (newProgress == 100) { pbComplete.setVisibility(View.INVISIBLE); } else { if (View.INVISIBLE == pbComplete.getVisibility()) { pbComplete.setVisibility(View.VISIBLE); } pbComplete.setProgress(newProgress); } } }); /** * 拿到当前页面的路径 */ wvShowDetails.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 当前的路径穿进去处理 isTitleChange(url); return super.shouldOverrideUrlLoading(view, url); } }); wvShowDetails.loadUrl(url); } private void myOnclick(){ // 监听返回键 wvShowDetails.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent keyEvent) { if ((keyCode == KeyEvent.KEYCODE_BACK) && wvShowDetails.canGoBack()) { if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { //只处理一次 myLastUrl(); } return true; } return false; } }); } /** * 拿到上一页的路径 */ private void myLastUrl(){ WebBackForwardList backForwardList = wvShowDetails.copyBackForwardList(); if (backForwardList != null && backForwardList.getSize() != 0) { //当前页面在历史队列中的位置 int currentIndex = backForwardList.getCurrentIndex(); WebHistoryItem historyItem = backForwardList.getItemAtIndex(currentIndex - 1); if (historyItem != null) { String backPageUrl = historyItem.getUrl(); // Logger.t("111").d("拿到返回上一页的url"+backPageUrl); wvShowDetails.goBack(); // 重新判断设置标题 isTitleChange(backPageUrl); } } } /** * 判断标题是否改变 */ private void isTitleChange(String url){ String myurl="type=sp"; if(url.contains(myurl)) { // 包含说明是内页 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); int top=dip2px(this,-35f); lp.setMargins(0,top,0,0); wvShowDetails.setLayoutParams(lp); }else{ // 不包含说明是外面页 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(0,0,0,0); wvShowDetails.setLayoutParams(lp); } } /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } }
开网络权限:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context="com.zhh.mytestwebview.MainActivity" android:orientation="vertical" > <ProgressBar android:id="@+id/pbComplete" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="2dp" android:layout_alignParentBottom="true" android:progressDrawable="@drawable/progressbar" /> <WebView android:id="@+id/wvShowDetails" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF33FF" android:layout_marginTop="-35dp" > </WebView> </LinearLayout>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>源码下载:
http://download.csdn.net/download/zhaihaohao1/10151527