3

我将格式化的单行文本(没有 \n)放到不可编辑的 TextView 中。在程序的导航中,可以更改文本。在某些文本上,TextView 缩小到 0x0 像素,我什么也看不到!我添加了一些菜单来每次将文本截断 10 个字符,我发现如果字符数大于 4470,则 TextView 会缩小。

通过将 \n 放在中间将文本分成几行可以解决问题,但这不是我的意图。

你能帮我看看这是否被记录在案,或者有什么可以设置来消除这个限制吗?

4

1 回答 1

0

我做了一些测试。看来这个值不是固定的。它每次都上下移动。但是有一些限制:

  • TextView.maxLines 默认为 Integer.MAX_VALUE (2147483647)
  • TextView.maxEms 默认为 Integer.MAX_VALUE
  • Java 字符串通常是 Integer.MAX_VALUE 或最大堆大小的一半

在我的第一次测试中,它在一行中最多可以处理179 899 个字符。通过添加android:maxLength="10000000"到 xml 我得到了184 200。但这个数字只工作了一次。在\n每个字符后换行,我得到了大约750 000

有趣的是,textView 从未像当时那样缩小。该应用程序崩溃了:

抛出 OutOfMemoryError “在 OOM 之前无法分配 0 个空闲字节和 0B 的 32 字节分配,目标占用空间 536870912,增长限制 536870912”(VmSize 2143664 kB,递归案例)

我使用了 Pixel 3 API 29 模拟器,内存为 1536 mb,堆为 256mb,代码如下:

StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i<750000; i++) {
  stringBuilder.append("A\n");
}
textView.setText(stringBuilder);

我在文档中没有找到任何东西。

底线是没有实际的最大值,今天手机有更多的内存......

于 2020-04-28T23:27:49.287 回答