【问题标题】:Is there a way to create RecyclerView-like behavior for TextView nested in ScrollView?有没有办法为嵌套在 ScrollView 中的 TextView 创建类似 RecyclerView 的行为?
【发布时间】:2020-05-17 21:33:22
【问题描述】:

我正在创建一个在 TextView 中显示文本的应用程序。由于文本可能非常大,它嵌套在 ScrollView 中。

在文本非常大之前一切正常 - 例如整本书的内容。对于如此大的内容,应用程序的 UI 由于内存需求大而开始无响应。

解决方案 1 只需拆分书的内容并将其显示在多个页面中,例如通过使用 ViewPager2。

是的,这肯定会奏效。然而,在我的情况下,文本的“无限”垂直滚动是 UI 设计的决定,因此这个解决方案不适合我。

解决方案 2 使用 RecyclerView 并将“书”的每一行渲染为单独的 TextView 实例。

这将是一个很好的解决方案,但不幸的是我需要支持文本选择。此解决方案将阻止用户选择多行文本。

问题 您能否提出任何解决方案,允许“无限”(类似 RecyclerView)滚动文本,同时保留所有文本选择和文本格式化功能?

【问题讨论】:

标签: android android-recyclerview textview infinite-scroll android-scrollview


【解决方案1】:

RecyclerView 是您的最佳选择:

  • 我知道您在问题中提到了它,但是您以错误的方式接近它,因为您说您想将书的每一行呈现为单独的 TextView 项目(这不是解决问题的方法)。

改为:

1) recyclerView 的项目将是一些 LinearLayout 包含一个 TextView (它会像页面项目)。

2) 假设这本书是一本大书String,将其拆分为子字符串块(以子字符串就像一页的方式),并将这些子字符串块放在某个列表中:

List<String> chunksList = new ArrayList<String>();

3) 您稍后将此列表传递给适配器,并根据位置渲染每个子字符串。

   adapter = new bookAdapter(........., chunksList);

4) 不管String 的书有多大,都可以动态滚动。因为它取决于chunksList 以及它包含多少子字符串(请记住,chunksList 对于您要呈现的每本书都会有所不同)。

5) 同样使用这种方法,您可以使用分页。

祝你好运。

【讨论】:

  • 我明白了,从性能的角度来看,这将是一个更好的解决方案。但它与 解决方案 2 并没有太大区别,并且仍然会阻止用户跨页面/块选择文本。这就是我所需要的功能。
猜你喜欢
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多