其实之前的初衷是想满足在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", "");