android - 对于一个单行TextView,当字符串超出一行时,如何获取未显示的部分字符串?
PHP中文网
PHP中文网 2017-04-17 14:34:53
0
1
336
PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆 (1)
大家讲道理

假设TextView的宽度是在xml内设置的具体数值,比如300dp,
(目的是为了简化这个问题,如果设置为match_parent或者wrap_content,需要在程序运行时计算其宽度,而直接getWidth总是返回0,比较麻烦。)

比如是这样配置的:

然后填充了一个超长的字符串,比如这样:

String str = "If you really want to hear about it, the first thing you'll probably want to know";

这样就会导致显示不全,像这样:
If you really want to hear about it, the first thin...

所以,如果你想得到已显示的字符个数,或者未显示的字符个数,那么其中的关键是如何计算每一个字符的宽度
然后遍历这个字符串,当前n个字符宽度总和,超过TextView宽度时,就得到了已显示的字符个数。

String str = "If you really want to hear about it, the first thing you'll probably want to know"; mTextView = (TextView) findViewById(R.id.textView); // 计算TextView宽度:xml中定义的宽度300dp,转换成px float textViewWidth = convertDpToPixel(300); float dotWidth = getCharWidth(mTextView, '.'); Log.d(TAG, "TextView width " + textViewWidth); int sumWidth = 0; for (int index=0; index

结果如下,在荣耀3C和LG G3上测试通过(G3比计算的结果,多显示了一个字符)

10-22 01:17:42.046: D/Text(21495): TextView width 600.0 10-22 01:17:42.048: D/Text(21495): #0: I, width=8.0, sum=8 10-22 01:17:42.049: D/Text(21495): #1: f, width=9.0, sum=17 10-22 01:17:42.049: D/Text(21495): #2: , width=7.0, sum=24 10-22 01:17:42.049: D/Text(21495): #3: y, width=14.0, sum=38 ...... 10-22 01:17:42.053: D/Text(21495): #17: t, width=9.0, sum=213 10-22 01:17:42.053: D/Text(21495): #18: , width=7.0, sum=220 10-22 01:17:42.053: D/Text(21495): #19: t, width=9.0, sum=229 ...... 10-22 01:17:42.061: D/Text(21495): #50: n, width=16.0, sum=575 10-22 01:17:42.061: D/Text(21495): #51: g, width=16.0, sum=591 10-22 01:17:42.061: D/Text(21495): TextView shows #51 char: If you really want to hear about it, the first thin

就是这样。

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!