关于获取textview中文字width的问题

shililang 无  2014-01-07 11:31:30
我通过以下代码设置了一个日期
Spannable WordtoSpan = new SpannableString(time + " " + date);
WordtoSpan.setSpan(new AbsoluteSizeSpan(mTextSize_big), 0, time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new AbsoluteSizeSpan(mTextSize_small), time.length() + 1, time.length() + date.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new StyleSpan(Typeface.BOLD), 0, time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new TypefaceSpan("sans"), 0, time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

setText(WordtoSpan);

效果如图:
然后通过这段代码获取文字的宽度:
String dt = time + " " + date;

Rect bounds = new Rect();
TextPaint paint = getPaint();
paint.getTextBounds(dt, 0, dt.length(), bounds);
mTextWidth = bounds.width();

但得到的宽度是不对的,大神们求指导下
...全文
83 点赞 收藏 2
写回复
2 条回复
shililang 2014年01月07日
引用 1 楼 ncepu307 的回复:
String dt = time + " " + date; Rect bounds = new Rect(); TextPaint paint = getPaint(); paint.getTextBounds(dt, 0, dt.length(), bounds); mTextWidth = bounds.width(); 你上面这段代码是在TextView的子类里面写的吗?
TextView mTextView;
//首先已经执行了setText
String dt = mTextView.getText().toString();
Rect bounds = new Rect();
TextPaint paint = mTextView.getPaint();
paint.getTextBounds(dt, 0, dt.length(), bounds);
mTextWidth = bounds.width();
对,都是在子类里面,我想实现的是:一个String的width可能会超过给定的textView的宽度,这样就显示不全了,那我要去缩小string的textsize,直到都能显示出来为止(当然我不可能在界面上一直缩小String,只有在最终找到合适的textsize的时候再显示出来)。 我后来是这样想的,我发现
Spannable WordtoSpan = new SpannableString(time + " " + date);
                WordtoSpan.setSpan(new AbsoluteSizeSpan(mTextSize_big), 0, time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
                WordtoSpan.setSpan(new AbsoluteSizeSpan(mTextSize_small), time.length() + 1, time.length() + date.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                WordtoSpan.setSpan(new StyleSpan(Typeface.BOLD), 0, time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                WordtoSpan.setSpan(new TypefaceSpan("sans"), 0, time.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                 
                setText(WordtoSpan);
setText后,测出来的String宽度是textView默认textsize得到的宽度,那我真实的长度这样就没法得到了... 然后我就只能做复杂点了,
setTextSize(mTextSize_big);Rect bounds = new Rect();
                TextPaint paint = getPaint();
                paint.getTextBounds(time, 0, time.length(), bounds);
                mTextWidth = bounds.width();
[code=javasetTextSize(mTextSize_small);]Rect bounds = new Rect(); TextPaint paint = getPaint(); paint.getTextBounds(date, 0, date.length(), bounds); mTextWidth = bounds.width();[/code] 把得到的两个width加起来就是我要的String的长度了,然后再通过和textView的宽度比较是减小字体还是这样就行了。语言组织力不强,看了我要达到的目的,你们有没有更简单点的方法啊?
回复 点赞
依然绿茶 2014年01月07日
String dt = time + " " + date; Rect bounds = new Rect(); TextPaint paint = getPaint(); paint.getTextBounds(dt, 0, dt.length(), bounds); mTextWidth = bounds.width(); 你上面这段代码是在TextView的子类里面写的吗?
TextView mTextView;
//首先已经执行了setText
String dt = mTextView.getText().toString();
Rect bounds = new Rect();
TextPaint paint = mTextView.getPaint();
paint.getTextBounds(dt, 0, dt.length(), bounds);
mTextWidth = bounds.width();
回复 点赞
发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告