事先陈列一下我这个完成方法的特点:
- 支持中英文和符号的混合排版
- 支持动态更改文本和字体大小,会自动完成对齐适配
因为我目前只拿这个来做菜单显示,并没有考虑多行多段的情况,目前只支持单行左右对齐,当字体超出单行显示本方法是无效的。有兴趣的朋友可以在我基础上扩展一哈,我想了一下实现起来应该不难
方法思路:
总得来说,还是空格填充,通过自动适配的空格设置来实现对齐效果,字号越小的话空格精度越高,对齐效果越好。
代码如下,很简单,在TextView的onPreDraw里加一段算法即可:
static final String firstKG = "\u00A0";
static final String secondKG = "\u2009";//两种不同长度的空格
TextView epgtv2;
epgtv2.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if(epgtv2.getText().length() < 2){
return true; //字符个数小于2,没有对齐的必要
}
int width = epgtv2.getWidth();
int number;
Paint p = epgtv2.getPaint();
float fisrtLength = p.measureText(firstKG,0