Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我能知道X dp宽度的文本视图可以容纳多少个字符吗?_Android_Textview - Fatal编程技术网

Android 我能知道X dp宽度的文本视图可以容纳多少个字符吗?

Android 我能知道X dp宽度的文本视图可以容纳多少个字符吗?,android,textview,Android,Textview,有没有办法知道一个固定宽度(比如100dp)的文本视图可以容纳多少个字体大小为10sp的字符 我需要跟踪整个字符串是否适合(可见)预定义宽度的文本视图 我还没有找到一种方法来跟踪或计算这个 确定这一点的最佳方法就是测试它。由于您使用的是DP,因此它将相对独立于设备。除非您使用的是固定宽度字体,否则理论上没有办法确定它,除非您想实际测量每个字母的宽度、字距等,并与TextView的宽度进行比较。由于Android使用,每个字符占用不同的宽度。此外,如果您考虑到字符串的宽度可能小于单个字符的宽度之和

有没有办法知道一个固定宽度(比如100dp)的文本视图可以容纳多少个字体大小为10sp的字符

我需要跟踪整个字符串是否适合(可见)预定义宽度的文本视图


我还没有找到一种方法来跟踪或计算这个

确定这一点的最佳方法就是测试它。由于您使用的是DP,因此它将相对独立于设备。除非您使用的是固定宽度字体,否则理论上没有办法确定它,除非您想实际测量每个字母的宽度、字距等,并与TextView的宽度进行比较。由于Android使用,每个字符占用不同的宽度。此外,如果您考虑到字符串的宽度可能小于单个字符的宽度之和

因此,通过一次添加一个字符来测量整个字符串是最容易的,直到(a)发现整个字符串符合限制,或者(b)字符串的宽度超过限制

下面的代码显示了如何查找大小为11px的字符在TextView 100px宽中的数量。(您可以在Web上找到在px和dp之间转换的公式)

我们将在循环中使用递增
end
的值,直到它不再适合
TextView
的宽度

String text = "This is my string";
int textViewWidth = 100;
int numChars;

Paint paint = textView.getPaint();
for (numChars = 1; numChars <= text.length; ++numChars) {
    if (paint.measureText(text, 0, numChars) > textViewWidth) {
        break;
    }
}

Log.d("tag", "Number of characters that fit = " + (numChars - 1));
String text=“这是我的字符串”;
int textViewWidth=100;
国际货币基金组织;
Paint=textView.getPaint();
用于(numChars=1;numChars textViewWidth){
打破
}
}
Log.d(“标记”,“适合的字符数=”+(numChars-1));

如果性能不佳,您可以尝试使用二进制搜索方法而不是线性循环。

无法测试。文本通过提要传递并显示。有时有20个字符,有时有120个字符。我需要检测溢出长度,以便减小字体大小。它不应该自动换行吗?如果我设置只有4行可见,则不会。不适合的文本在字符串中不可见,长度超过4行,宽度为100dp。好的,假设您可以检查并减小文本大小,使其适合。如果得到500个字符会发生什么?你的文字会变得太小,无法阅读。更好的解决方案可能是只显示前X个字符,然后用省略号(…)表示没有显示其他文本。它永远不会占用这么多字符。在最大字符数时,它通常缺少大约5个字符。不可能忽略这5个。当前版本根本没有显示它们,但我认为有一种方法可以全部显示它们。我如何知道有多少大小为11dp的字符(如果需要,我可以使用px或pt值)适合TextView 100dp宽?