安卓中计算 TextView 的宽高、打点

背景

假如我们有一个 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();



换行

在宽度为 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 中,当要自己画文本时,需要根据文本的长度做不同处理如打点等,这时我们就可以使用该方法计算文本的宽高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值