关于获取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();

但得到的宽度是不对的,大神们求指导下
...全文
186 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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();

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧