xml文件:
<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"
android:background="@color/white"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/blue"
android:fillViewport="true"
android:scrollbars="none" >
<!--
--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical" > <include android:id="@+id/maildetail_head_rl" layout="@layout/head_arrow_title" /> <LinearLayout style="@style/line_fill_horizontal" /> <include android:id="@+id/maildetail_head_digestll" layout="@layout/maildetail_head_digest" /> <!-- 这是附件的内容 --> <LinearLayout style="@style/line_fill_horizontal" /> <com.jiangmen.zdaiapp.view.MerchantWebView android:id="@+id/maildetail_content" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" /> <!-- B: 一定要将宽高设置matchA:android:fillViewport="true"可以是 屏幕底部空白消失
<com.jiangmen.zdaiapp.view.MerchantWebView android:id="@+id/maildetail_content" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" />--> </LinearLayout> </ScrollView> <LinearLayout style="@style/line_fill_horizontal" android:layout_gravity="bottom" /> <include android:id="@+id/detail_bottomenu" layout="@layout/maildetail_bottom_menu" /> </LinearLayout>
MerchantWebView是自定义的WebView,;里面有项关的设置:点击事件拦截
package com.jiangmen.zdaiapp.view; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.http.SslError; import android.os.Handler; import android.util.AttributeSet; import android.util.Log; import android.view.ContextMenu; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.webkit.JavascriptInterface; import android.webkit.JsResult; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import android.widget.Toast; /** * ****************************************** * * File name:MerchantWebView.java * * @Author zhsf @Date:2015-11-30 * * @Description: com.jiangmen.zdaiapp.view.MerchantWebView * * ****************************************** */ public class MerchantWebView extends WebView { private OnWebViewListener onWebViewListener; private Context mwContext; // /**自定义菜单的 按钮*/ // private final int WEB_FenXiang=11; // private final int WEB_XiaZai=12; // private final int WEB_FuZhi=13; // private final int WEB_AddSQ=14; public interface OnWebViewListener { public void WebViewOnProgressChanged(WebView view, int newProgress); } public void setOnWebViewListener(OnWebViewListener onWebViewListener) { this.onWebViewListener = onWebViewListener; } public MerchantWebView(Context context) { super(context); init(); mwContext=context; } public MerchantWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); mwContext=context; } public MerchantWebView(Context context, AttributeSet attrs) { super(context, attrs); mwContext=context; init(); } // @Override // public boolean onKeyDown(int keyCode, KeyEvent event) { // if(keyCode==KeyEvent.KEYCODE_BACK&&canGoBack()){ // goBack(); // return true; // } // return super.onKeyDown(keyCode, event); // } private void init() { WebSettings setting = getSettings(); setting.setJavaScriptEnabled(true); // 0 setting.setJavaScriptCanOpenWindowsAutomatically(true);// 允许js弹出窗口 setting.setBuiltInZoomControls(false); // 原网页基础上缩放 //0 setting.setUseWideViewPort(true); // 0 setting.setSupportZoom(false);// 支持缩放 //0 setting.setLoadWithOverviewMode(true); setting.setDomStorageEnabled(true); // 数据库存储API是否可用,默认值false setting.setTextZoom(250); // setting.setLoadsImagesAutomatically(true);// 设置这两项可以上下面两个方法加载有效 setting.setBlockNetworkImage(false); // 是否禁止从网络获取资源,通过http、https URI setting.setBlockNetworkLoads(false);//Block : 拦截阻塞 setting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);// 支持内容重新布局 setting.setDisplayZoomControls(false);// 不显示webview缩放按钮1 setPageCacheCapacity(setting); setWebViewClient(this); addJavascriptInterface(this, "Resize"); } private void setWebViewClient(WebView webView) { webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Toast.makeText(mwContext, "onPageStarted="+url, Toast.LENGTH_SHORT).show(); Log.e("onPageStarted", "onPageStarted=="+url); super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { return super.shouldOverrideKeyEvent(view, event); } /* * 这个方法是,加载url( 你选中的URL )//这里我 打开新的页面进行预览 * */ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // computeHeight();//这个方法,屁股后面总是多出好多空白 // view.loadUrl(url);/这里我 打开新的页面进行预览 Toast.makeText(mwContext, "shouldOverrideUrlLoading="+url, Toast.LENGTH_SHORT).show(); Log.e("shouldOverrideUrlLoading", "shouldOverrideUrlLoading=="+url); 这个方法 没有设置边距; 所以,当有 格式错误的邮件内容显示不完全 // int w = View.MeasureSpec.makeMeasureSpec(0, // View.MeasureSpec.UNSPECIFIED); // int h = View.MeasureSpec.makeMeasureSpec(0, // View.MeasureSpec.UNSPECIFIED); // //重新测量 // measure(w, h); return true; } @Override public void onPageFinished(WebView view, String url) { // computeHeight();//这个方法,屁股后面总是多出好多空白 // String text = "我是来自Android"; // view.loadUrl("javascript:carDetail('" + text + "');"); 这个方法 没有设置边距;所以,当有 格式错误的邮件内容显示不完全 // int w = View.MeasureSpec.makeMeasureSpec(0, // View.MeasureSpec.UNSPECIFIED); // int h = View.MeasureSpec.makeMeasureSpec(0, // View.MeasureSpec.UNSPECIFIED); // //重新测量 // measure(w, h); view.loadUrl("javascript:document.body.style.padding=\"4%\"; void 0");//设置Padding // Log.e("onPageFinished", "onPageFinished=="+url); super.onPageFinished(view, url); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // 接受所有网站的证书 } @Override public void onLoadResource(WebView view, String url) { // TODO Auto-generated method stub super.onLoadResource(view, url); } }); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if (null != onWebViewListener) { onWebViewListener.WebViewOnProgressChanged(view, newProgress); } } @Override public void onReceivedTitle(WebView view, String title) { // Log.e("onReceivedTitle", "onReceivedTitle=="+title); super.onReceivedTitle(view, title); } @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { // Log.e("onJsAlert", "onJsAlert=="+url+"message=="+message); return super.onJsAlert(view, url, message, result); } }); // 自定义 长按菜单栏 // webView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener(){ // // public void onCreateContextMenu(ContextMenu menu, View arg1, // ContextMenuInfo arg2) { // // TODO Auto-generated method stub // MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() { // @Override // public boolean onMenuItemClick(MenuItem item) { // // do the menu action // switch (item.getItemId()) { // case WEB_FenXiang: // Log.i("you click","分享"); // break; // case WEB_XiaZai: // Log.i("you click","下载"); // break; // case WEB_FuZhi: // Log.i("you click","复制"); // break; // case WEB_AddSQ: // Log.i("you click","增加到书签"); // break; // } // return true; // }}; // // Log.i("long click","true"); // HitTestResult result = ((WebView) arg1).getHitTestResult(); // int resultType = result.getType(); // if ((resultType == HitTestResult.ANCHOR_TYPE) || // (resultType == HitTestResult.IMAGE_ANCHOR_TYPE) || // (resultType == HitTestResult.SRC_ANCHOR_TYPE) || // (resultType == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) { // Intent i = new Intent(); // Log.i("extrea",result.getExtra()); // // MenuItem item = menu.add(0, WEB_FenXiang, 0, "分享").setOnMenuItemClickListener(handler); // item.setIntent(i); // item = menu.add(0, WEB_FuZhi, 0, "复制").setOnMenuItemClickListener(handler); // item.setIntent(i); // // item = menu.add(0,WEB_XiaZai, 0,"下载").setOnMenuItemClickListener(handler); ; // item.setIntent(i); // // item = menu.add(0,WEB_AddSQ, 0,"增加到书签").setOnMenuItemClickListener(handler); ; // item.setIntent(i); // menu.setHeaderTitle(result.getExtra()); // } // else if (resultType == HitTestResult.IMAGE_TYPE) { // Log.i("image type","ture"); // Intent i = new Intent(); // MenuItem item = menu.add(0, 1, 0, "OPEN"); // item.setIntent(i); // item = menu.add(0, 2, 0, "图片"); // item.setIntent(i); // menu.setHeaderTitle(result.getExtra()); // } // } // }); // webView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { // // public void onCreateContextMenu(ContextMenu menu, View arg1, // ContextMenuInfo arg2) { // // TODO Auto-generated method stub // MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() { // public boolean onMenuItemClick(MenuItem item) { // // do the menu action // switch (item.getItemId()) { // case 1: // Log.i("you click", "分享"); // break; // case 2: // Log.i("you click", "下载"); // break; // } // return true; // } // }; // // HitTestResult result = ((WebView) arg1).getHitTestResult(); // int resultType = result.getType(); // if ((resultType == HitTestResult.IMAGE_TYPE)) { // menu.setHeaderTitle(result.getExtra()); // // Intent i = new Intent(); // MenuItem item = menu.add(0, 1, 0, "分享") // .setOnMenuItemClickListener(handler); // item.setIntent(i); // // item = menu.add(0, 2, 0, "下载").setOnMenuItemClickListener( // handler); // item.setIntent(i); // } // } // }); } private Handler handler = new Handler(); private Runnable runnable; /** * 这个方法,屁股后面总是多出好多空白;不行 */ private void computeHeight() { loadUrl("javascript:Resize.fetchHeight(document.body.getBoundingClientRect().height)"); } @JavascriptInterface public void fetchHeight(final float height) { final int newHeight = (int) (height * getResources().getDisplayMetrics().density); runnable = new Runnable() { @Override public void run() { if (getLayoutParams() instanceof LinearLayout.LayoutParams) { LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) getLayoutParams(); linearParams.height = newHeight; setLayoutParams(linearParams); } } }; if (null != handler) { handler.postDelayed(runnable, 50); } } /** * 当进行goBack的时候 使用前一个页面的缓存 避免每次都重新载入 * * @param webSettings * webView的settings */ protected void setPageCacheCapacity(WebSettings webSettings) { try { Class<?> c = Class.forName("android.webkit.WebSettingsClassic"); if (null != c) { Method tt = c.getMethod("setPageCacheCapacity", new Class[] { int.class }); if (null != tt) { tt.invoke(webSettings, 5); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }
//加载字符串加载网址:
@SuppressLint({ "SetJavaScriptEnabled", "NewApi" }) private void initWebView(MerchantWebView webView, String... newContent) { // WebSettings webSettings=webView.getSettings(); // // webView.setInitialScale(39); //适应全屏: 39适应竖屏 57适应横屏;0默认的,不做任何修改 ; // // webSettings.setJavaScriptEnabled(true);//支持JS,不然下面的不起作用0 // webSettings.setSupportZoom(true);//支持屏幕缩放0 // webSettings.setBuiltInZoomControls(true);//设置WebView可触摸放大缩小0 // webSettings.setDisplayZoomControls(false);//不显示webview缩放按钮 // webSettings.setUseWideViewPort(true); // //设置双击变大,再双击变小,当手动放大后,双击可以恢复到原始大小,设置如下 // webSettings.setTextZoom(200);//字体大小 WebSettings wb; // // String htmlText = "<html>" + "<head>" + "<style type=\"text/css\">" + // "body{padding-left: 40px;padding-right: 40px;}" + "</style>" + // "</head>"; webView.loadDataWithBaseURL("", // getHtmlData(msgEmail.getBodyContent().replaceAll(" ", // " ").replaceAll("\n", "<br/>")), // "<span >"+ //显示文本内容 style=\"color:#333; font-size:10px; // color:#F60\" newContent[0] // .replaceAll(" ", " ").replaceAll("\n", "<br/>")+ // "</span>" // 4个==一个汉字位 一个空格 , "text/html", "UTF-8", ""); }