安卓中计算 TextView 的宽高、打点
来源:互联网 发布:淘宝竹筒粽子的竹筒 编辑:程序博客网 时间:2024/06/05 19:32
背景
假如我们有一个 TextView 实例:
TextView textView = new TextView(getContext());textView.setText("i love u...");textView.setTextColor(getResources().getColor(R.color.colorAccent));
宽度
计算这个 TextView 中文本的宽度:
int textWidth = (int) android.text.Layout.getDesiredWidth(textView.getText(), textView.getPaint());
或者
float textWidth = textView.getPaint().measureText(textView.getText().toString());
该值表示:
- 该值不包含 textView 的 margin 或 padding 值,是裸文本的长度;textView 的文本中不能含有换行符;
- 该值是 textView 的文本放在一行显示时的长度;
- 该长度可能大于屏幕宽度(此时表示实际文本会折行显示,该长度等于折行后的各行文本的长度之和);
高度
Rect bounds = new Rect(); mTextPaint = textView.getPaint(); mText = textView.getText().toString(); mTextPaint.getTextBounds(mText, 0, mText.length(), bounds); textHeight = bounds.height();
或者:
int ascent = (int) (-textView.getPaint().ascent());
换行
在宽度为 textWidthAtMost 的水平空间,最多可以放下 charNumInThisLine 个字符:
int charNumInThisLine = mTextPaint.breakText(mText, index, len, true, textWidthAtMost, null);
注意,这里换行没有考虑换行策略(分词策略)以及行间距等。
打点
an droid.text.TextUtils 工具类提供了自动打点(省略号)的功能:
CharSequence s = TextUtils.ellipsize(CharSequence mText, TextPaint p, float textWidthAtMost, TruncateAt where);
在宽度为 textWidthAtMost 的水平空间,如果 mText 能放的下就原样返回 mText,否则按照 where (TruncateAt.START,TruncateAt.MIDDLE,TruncateAt.END,TruncateAt.MARQUEE,TruncateAt.END_SMALL)的方式进行打点并返回打点后的字符串。
用途
在自定义 View 中,当要自己画文本时,需要根据文本的长度做不同处理如打点等,这时我们就可以使用该方法计算文本的宽高。
1 0
- 安卓中计算 TextView 的宽高、打点
- Android计算string在TextView所占的宽高
- 高德地图打点
- TextView最多设置多少行,然后多出来打点显示(涉及的一些参数)
- TextView 文本过长时自动打点
- textview 计算宽
- 字符串的 宽高计算
- UILabel宽高的计算
- 计算文本的宽高
- Android计算TextView的宽度
- 常用的计算宽高的方法
- iOS中计算文本的宽高
- 计算字符串的宽或者高
- iOS动态计算Label的宽高
- 根据字符串计算UILabel的宽,高
- 计算一个字符串的宽,高
- iOS动态计算Label的宽高
- ios计算文本的宽高
- 文章出自http://blog.csdn.net/loongggdroid/article/details/17616509
- leetcode 198 House Robber
- Eclipse的使用小技巧和快捷键演示
- 算法竞赛入门经典(第2版)习题1-2详解
- 反思,今天总体感觉事情很简单,但项目比较多,没有掌握住很好的技巧,所以感觉很混乱
- 安卓中计算 TextView 的宽高、打点
- iOS_逆向_使用class dump导出头文件
- Java正则表达式
- 直线分割平面问题(数学归纳法)
- Java构造函数
- JSON.stringify和JSON.parse
- 瀑布流的实现
- Goroutine + Channel 实践
- java动态代理