今天在写界面的时候,有个在同一行显示两个文本的布局,布局是同一行左边显示时间 ,右边显示地点,初看这简单啊,不就是一个左一个右吗,无论是RelativeLayout的layout_alignParent属性,还是LinearLayout的权重属性layout_weight或者是约束布局都可以实现,于是分分钟一个左右显示的文字布局写好了。
本以为这样就算完成了吧,可是测试提出了问题 :文字多了要怎么显示,最后UI定下地点长了的话,先往左延伸,如果一行显示不完就转换到下一行从面继续往后延续。
看到这我觉得两个textview是不好实现了,想了会怎么操作没有想到什么布局可以实现这一的效果,于是就想用一个textview显示,用一个textview显示的话就需要在中间添加上空格,要加多少空格呢,这是就要计算下两边文字宽度然后计算下单个空格宽度,计算有了textview宽度以及文字宽度和单个空格宽度就可以计算出需要加多少空格,然后把添加到空格的文本设置到textview中就可以了,具体代码如下:
String text1 = "发送给:全体人员 ";
String text2 = "地点:东西南北上下左右四面八方的中间";
TextPaint paint = tv.getPaint();
int width = tv.getMeasuredWidth() - tv.getPaddingLeft() -
tv.getPaddingRight();
float width1 = paint.measureText(text1);
float width2 = paint.measureText(text2);
float spaceWidth = paint.measureText(" ");
int spaceCount = (int) ((width - width1 - width2) / spaceWidth);
StringBuilder sb = new StringBuilder();
sb.append(text1);
for (int i = 0; i < spaceCount; i++) {
sb.append(" ");
}
sb.append(text2);
tv.setText(sb.toString());
如果你无法获取到tv宽度,你可以通过viewTreeObserver的在布局加载后获取