先来看问题:如下图,是用拼接html 的方式用一个textView 显示,新需求是让他们每列对齐
原始界面
这个是这样实现的 holder.tvItemTrainPriceList.setText(Html.fromHtml(builder.toString()));
修改后页面
1. 第一个解决方案-修改标签样式-table
'100%' height='100%' >
'#A7A7A7'>无座 '#A7A7A7' style='width:200px;display:inline-block;'>¥364.5 '#A7A7A7'>(无票) '#A7A7A7'>一等座 '#A7A7A7' style='width:200px;display:inline-block;'>¥19400.0 '#A7A7A7'>(无票) '#A7A7A7'>二等座 '#A7A7A7' style='width:200px;display:inline-block;'>¥119.5 '#A7A7A7'>(余100张)
无座 | ¥364.5 | (无票) |
一等座 | ¥19400.0 | (无票) |
二等座 | ¥119.5 | (余100张) |
怎奈何Android TextView 不支持 Table 标签
尝试自定义解析器也失败了
2. 第二个解决方案-用webview
1.准备用webview.loadData(tmp,"text/html","utf-8"); 结果出现中文乱码,
2.用这个解决webview.loadData(tmp, "text/html; charset=UTF-8", null);
3.结果出现字体大小问题,和webview 的父布局属性: warp_content 冲突,以及无法自动撑开布局等问题,只能弃用
3. 第三个解决方案-换成gridView
1.准备在adapter 里面嵌套gridView 想想太蛋疼,直接放弃
4. 第四个解决方案-添加空格
1.峰回路转,第四个方案终于完美实现一开始不管怎么调整都对齐不了,经过多次尝试发现 Android中空格字符有这么几种:
 
== 普通的英文半角空格
 
==
==  
== no-break space
(普通的英文半角空格但不换行)
 
== 中文全角空格 (一个中文宽度)
 
==
== en空格 (半个中文宽度)
 
==
== em空格 (一个中文宽度)
 
== 四分之一em空格 (四分之一中文宽度)
对应的html 空格如下:
 
不断行的空白(1个字符宽度)
 
半个空白(1个字符宽度)
 
一个空白(2个字符宽度)
 
窄空白(小于1个字符宽度)
3.结论:
- 一个汉字用: 四个
- 如果是数字: 一个阿拉伯数字, 用三个
thinsp;
占位
String htmlString = "商务座
¥1024.5
(余1张)
硬座
¥102.5
(余10张)
商务座
¥10200.5
(余100张)
二等座
¥119.5
(无票)";holder.tvItemTrainPriceList.setText(Html.fromHtml(builder.toString()));
结果是这样的,成功搞定