您的位置:首页 > 移动开发

webview系列问题总结

2015-09-18 16:42 519 查看
Android的WebView退出后flash视频播放器无法退出的问题

重写activity的onResume,onPause方法,并调用webview的onResume,onPause方法

@Override
protected void onResume() {
super.onResume();
webView.onResume();
}
@Override
protected void onPause() {
super.onPause();
webView.onPause();
}

webView加载文件或加载地址时出现白板的问题

在Android中,WebView可以用来加载http和https网页到本地应用的控件。但是在默认情况下,通过loadUrl(String url)方法,可以顺利loadUrl(“http://www.baidu.com”)之类的页面。但是,当load通过ssl加密的https页面,但是如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像自带的浏览器一样弹出提示。因此,我们必须针对这种情况进行处理。

首先说的是Android 2.2及更高的处理方式,在2.2及以上系统中处理只需要重载WebViewClient
的 onReceivedSslError即可。

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();//接受所有证书
Log.e("SslError",error.toString());
}


webview加载网页图片文字不适配等问题

webView.getSettings().setJavaScriptEnabled(true);

webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);//样式适配(有些手机不行)

webView.getSettings().setBuiltInZoomControls(true);//触摸放大缩小

webView.getSettings().setSupportZoom(true);//支持缩放

以前做项目一直都没找到好的解决方法,最近同时找到了一个java解析HTML的工具类jsoup ,中文api地址:http://www.open-open.com/jsoup/。

使用方法如下,这里以网页中图片适配为例:

 Document doc_Dis = Jsoup.parse(s);
Elements ele_Img = doc_Dis.getElementsByTag("img");
if (ele_Img.size() != 0){
for (Element element:ele_Img) {
element.attr("style", "width:100%");
}  }

使用TextView显示网页

/**

该方法用于显示文字

*/

private void showHtmlText() {

        final String sText = "测试自定义标签:<br><h1><qdq>测试自定义标签</qdq></h1>";

        showText.setText(Html.fromHtml(sText, null, new MxgsaTagHandler(this)));

        showText.setClickable(true);

        showText.setMovementMethod(LinkMovementMethod.getInstance());
}
/**
* 提醒一点:获取图片以后,一定要设置图片的边界,界线
* 即:drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
* 不然获取图片后,Textview不能显示图片。
*/

private void showHtmlImg() {
//加载资源图片,本地图片,网络图片类似,
final String sText1 = "测试图片信息:<img src=\""+R.drawable.ic_launcher+"\" />";
final Html.ImageGetter imageGetter = new Html.ImageGetter() {
   public Drawable getDrawable(String source) {
    //source就是图片路径
       Drawable drawable=null;
   int rId=Integer.parseInt(source);
   drawable=getResources().getDrawable(rId);
   drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
   return drawable;
   };
};
showImg.setText(Html.fromHtml(sText1, imageGetter, null));
}

public class MxgsaTagHandler implements TagHandler{

    private int sIndex = 0;  

    private  int eIndex=0;

    private Context mContext;

    

    public MxgsaTagHandler(Context context){

        mContext=context;

    }

    

    public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {

        if (tag.toLowerCase().equals("qdq")) {

            if (opening) {

                sIndex=output.length();

            }else {

                eIndex=output.length();

                output.setSpan(new MxgsaSpan(), sIndex, eIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            }

        }

    }

    private class MxgsaSpan extends ClickableSpan implements OnClickListener{

        @Override

        public void onClick(View widget) {

            //具体代码,可以是跳转页面,可以是弹出对话框,下面是跳转页面

            AlertDialog.Builder builder=
ac1d
new AlertDialog.Builder(mContext);

            builder.setTitle("呵呵");

            builder.setMessage("成功了");

            builder.show();

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息