文档章节

Android WebView出现的乱码问题

当空皓月
 当空皓月
发布于 2015/01/05 18:15
字数 971
阅读 4362
收藏 6

1、webview加载网页<html>源码乱码问题

一、webView.loadUrl();

直接显示网页内容(单独显示网络图片),一般不会出现乱码。

二、webView.loadData(data, "text/html", "UTF-8");

loadData主要被设计用来装载URI格式的数据,它不能通过网络来加载内容。网上流传的webview加载中文出现乱码,多数是使用此方法。使用过程中主要有两个问题:

(1)loadData不能加载图片内容,如果想加载图片内容或者获得更强大的Web支持建议使用更强大的loadDataWithBaseURL.

(2) 许多实用loadData方法的朋友都遇到显示乱码的问题,那是因为编码器设置错误导致的。我们知道String类型的数据主要是unicode编码,而WebView一般为了节省资源使用的是UTF-8编码,所以我们在loadData的时候要告诉方法怎样转码。即要告诉它要将unicode编码的内容转成UTF-8编码的内容。有些朋友虽然在loadData的时候设置了编码方式,但是还是显示乱码,这是因为还需要为WebView的text编码指定编码方式。举例如下:

WebView wv = (WebView)findViewById(R.id.webview) ;

wv.getSettings().setDefaultTextEncodingName(“UTF -8”) ;

wv.loadData(content, “text/html”, “UTF-8”) ;

注意为gb2312或gbk

(3).网页说明编码格式 

以上两种方法是网上给的比较好的方法,但是我都试了下都没有解决我的乱码问题。 原来我是用LoadData方法来解析html的,但是据说这是官方的一个BUG,不能用来解析中文。所以绕其道而行之,采用loadDataWithBaseURL的方法,其中codeingType设置为utf-8就OK了。3、loadDataWithBaseURL如果单纯显示文字的话可以写webView.loadDataWithBaseURL(null, string, "text/html", "utf-8", null);

如果要显示图片可以写webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);

其中baseUrl为你存储照片的路径,比如:

2、webview背景透明:

在xml文件中设置android:background无效。

    <WebView

                android:id="@+id/big_data_detail_content_textview"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:textColor="#fff"

                android:background="@drawable/color_transparent"

                android:textSize="14dp" />

解决办法:

webview.setBackgroundColor(0); // 设置背景透明

  1. 1.在2.X的平台下,一般设置webview背景为透明的方法如下:  

  2.   

  3. wvContent.setBackgroundColor(0);    

  4. 这个相信大家测试后都是没有问题的!  

  5.   

  6. 2.但当程序在4.0上使用时,发现居然这种设置方法无法,即使通过上面设置背景为0,照样显示出原来默认的白色背景(在我自己的话huawei U9500)中测试是部分会显示白色,有些界面的渲染还是成功的。这中现象是android4.0后,系统内部的加速器做了改变  

  7. 详细内容参考[color=red]http://blog.chenming.info/blog/2012/09/18/android-hardware-accel/[/color] 一篇很好的文章,我也是在这里找到问题解决的方法!  

  8.   

  9. 其实我按照方法,在WebView控件中是硬件加速器失效即  android:layerType="software",即使这样,我自己的机器测试还是出现部分WebView是白色背景!  

  10. 最后我在该Activity中注册了 android:hardwareAccelerated="false" 就可以了!

 

二:webView加载本地字体包:

purchase_detail_content_webview.setBackgroundColor(0); // 设置背景色

String detaliContent = "<html><head><style> @font-face {font-family: MyFont; src: url('file:///android_asset/fonts/hunda.TTF');}  div{text-indent: 2em;color:white;font-size:15;font-family:MyFont}</style></head><div>" + CONTENT + "</div><html>"; //asset/fonts/hunda.TTF:本地字体包文件;CONTENT :服务端发送的内容

purchase_detail_content_webview.loadDataWithBaseURL(null, detaliContent, "text/html", "utf-8", null);

原文地址:http://wptrafficanalyzer.in/blog/android-using-custom-ttf-fonts-in-webview/ 

三、webview和js脚本语言交互

http://zhidao.baidu.com/link?url=7u5Jw1vq1YBlhMpYoZwEx7bzvnrl05v-G6FFCMUeHyjDl5Wd6Dh3w1zBYghvGehlL0BV_RxtcvoFvjcZtZ7sUm60pg6oOxm08UDynB3wXeS 

四、返回上一个页面

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
            mWebView.goBack();// 返回上一个页面
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

不调用第三方浏览器,在本webview内部跳转

mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

webSettings.setJavaScriptEnabled(true);
        // 支持缩放
        webSettings.setBuiltInZoomControls(true);
        webSettings.setSupportZoom(true);
        // 隐藏zoom缩放按钮
        // webSettings.setDisplayZoomControls(false);
        // 自适应屏幕
        webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

© 著作权归作者所有

上一篇: CheckBox
下一篇: HTML
当空皓月
粉丝 14
博文 179
码字总数 67070
作品 0
郑州
私信 提问
加载中

评论(5)

当空皓月
当空皓月 博主

引用来自“小明隔壁家的老王”的评论

webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
如果多张图片 那baseUrl是哪张图的路径呢?
多次loadData就ok啦
小明隔壁家的老王
小明隔壁家的老王
webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
如果多张图片 那baseUrl是哪张图的路径呢?
小明隔壁家的老王
小明隔壁家的老王
webView.loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null);
如果多张图片 那baseUrl是哪张图的路径呢?
当空皓月
当空皓月 博主

引用来自“chinadong”的评论

不知道怎么显示藏文‘webview
这个我就不知道了
chinadong
chinadong
不知道怎么显示藏文‘webview
Android WebView Memory Leak WebView内存泄漏

在这次开发过程中,需要用到webview展示一些界面,但是加载的页面如果有很多图片就会发现内存占用暴涨,并且在退出该界面后,即使在包含该webview的Activity的destroy()方法中,使用webview...

Drealin
2013/01/07
37.9K
26
Android Crash问题

-- TimeoutException: com.android.org.conscrypt.OpenSSLDigestContext.finalize() timed out after 120 seconds- https://github.com/google/conscrypt/issues/546 https://github.com/goo......

desaco
03/03
0
0
在 Flutter 中使用 WebView

本文示例代码可在微信公众号「01二进制」后台回复「WebView」查看下载 前言 我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种: 在 App 内部打开网页 通过调用系...

雇个城管打天下
08/07
0
0
WebView与JavaScript交互

在WebView中使用JavaScript   如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript。   一旦使能之后,你也可以自己创建接口在你的应用和JavaScript代码间进行交互...

ljrapple
2014/07/29
438
0
Android开发学习笔记:浅谈WebView

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例化WebView组...

无鸯
2011/11/09
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

防止流量劫持有效途径-安装SSL证书

  在互联网的世界里,流量就等于金钱。而流量劫持是指,利用各种恶意软件、木马病毒,修改浏览器、锁定主页或不停弹出新窗口等方式,强制用户访问某些网站,从而造成用户流量损失的情形。 ...

安信SSL证书
16分钟前
2
0
关于工作流程数据模版的设置与使用.

关键字:ccbpm数据模版 解释说明:数据模版就是当前工作人员历史发起的历史流程里,把一些具有代表性的设置为模版,下次在启动流程的时候,选择模版里的数据在发起流程,避免重复数据录入的工...

ccflow周朋
30分钟前
4
0
第一个只出现一次的字符

处理字符串中重复或者次数出现等问题,最常用的就是哈希表,用字符串中的字符作为key,字符出现次数作为value,假定只有ASCII码范围内的字符,则可以开辟一个256大小的int数组,将每个字符(...

Garphy
31分钟前
6
0
通过构建区块链来学习区块链-1-Transaction|Block|POW

原文链接:https://medium.com/@vanflymen/learn-blockchains-by-building-one-117428612f46 交易Transaction 区块Block 工作量证明 你来这里是因为,和我一样,你对加密货币的崛起感到兴奋。...

Riverzhou
38分钟前
4
0
大数据最核心的关键技术——32个算法,记得收藏!

奥地利符号计算研究所的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结...

大数据金罗
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部