Android使用WebView加载文字总结之中文乱码、禁止横向滚动、自动换行

其实之前的初衷是想满足在Android中实现复制功能,使用TextView或者EditText来复制显示文字,在网上也找了一些资料,好像都不行,也许是我自己的问题;

最终想想使用WebView来实现这个功能。

在Android中使用WebView加载本地数据(文字)时容易出现的问题:
一、 WebView加载中文时乱码
通常做法:
1). 通过给webView设置编码格式
WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("UTF-8") ;
2.加载时给之设置编码格式:
webView.loadData(str.toString(), "text/html","UTF-8");
3.在拼html的时候给拼上“ <html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />。。。。。</html>
通过以上三种方式得出结果,依然乱码,胡乱猜测可能是一个Bug。
最后解决办法:
采用loadDataWithBaseURL的方式加载(代码如下):
webView.loadDataWithBaseURL("", str.toString(), "text/html","UTF-8", "");
二、 WebView内容对齐
这个说起来其实是两个问题,第一个是禁止横向滚动,另外一个是根据webview宽度让其自动换行。
1.禁止横向滚动,在WebView的API其实是有提供的
 WebSettings settings = webView.getSettings();
 settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

从字面上就可以看出来“SINGLE_COLUMN”,单列的意思,它就是根据控件宽度来压缩内容大小。(还有另外两种就不多介绍了),

但是如果是加载图片是可行的,不过在文字的时候就不灵光了。不知其原因。(见第2个问题)

2.根据webview宽度让其自动换行
以上不可压缩文字大小,现在只剩下换行了,WebView是没有这个接口的,也许是我没找到,我采用的方式是让html自已去换行,也就是拼html达到自动换行目的。如下:
<p style=\"word-break:break-all;\">。。。。</p>
三、 由于WebView设置Padding无效,所以也可以用html的方式给设置padding
padding:12px;

最终代码:

WebView webView = new WebView(g_context);
webView.setScrollContainer(false);
webView.setScrollbarFadingEnabled(false);
webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);


WebSettings settings = webView.getSettings();
settings.setDefaultTextEncodingName("UTF-8") ;
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
settings.setBuiltInZoomControls(false); // 设置显示缩放按钮
settings.setSupportZoom(false); // 支持缩放

StringBuffer str = new StringBuffer();
str.append("<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><body><p style=\"word-break:break-all; padding:12px;\">")
.append("Hello World!")
.append("</p></body></html>");

webView.loadDataWithBaseURL("", str.toString(), "text/html","UTF-8", "");



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值