我将文本视图上的文本设置为14,000,000个字符长的字符串。
这需要1到5分钟的时间才能加载到屏幕上(取决于设备)。有什么想法可以加快速度吗?
以下是相关代码:
responseView.text = requestResponsePair.second
.....................
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="com.salesrabbit.android.sales.universal.features.lumberjack.TextDisplayFragment">
<TextView
android:id="@+id/request_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/request_label_string"
android:textSize="20sp"/>
<TextView
android:id="@+id/text_view_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/response_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/response_label_string"
android:textSize="20sp"/>
<TextView
android:id="@+id/text_view_response"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
答案 0 :(得分:3)
一种方法
最近,Google宣布PrecomputedText
适用于SDK级别28及更高版本。随之而来的PrecomputedTextCompat
已发布,可用于SDK 21到27。我还没有尝试过,但是Chris Craik中有一篇名为“ Prefetch Text Layout in RecyclerView”的中篇文章,解释了如何利用它以及在不丢失任何框架的情况下从UI线程中释放出多少工作量。
文章摘录
预计算
var item = (from highPrice in listProduct
orderby highPrice.ProductPrice descending
select highPrice).FirstOrDefault();
将预先计算的文本设置为TextView
val precomputedText : Spannable = PrecomputedTextCompat.create(expensiveText, params)
请务必阅读文档,因为需要向后台线程发布一些内容。
方法二
将您的文本分成小块或小段。将其放入列表中,并使用简单的RecyclerView显示列表中的每个项目。这很简单,您将获得免费的良好性能,因为RecyclerView会渲染和处理用户可见的项目。
此外,请确保收听Episode 90: Spanspanspanspan播客中的Android Developers Backstage,该播客由Android工程团队的开发人员托管。
答案 1 :(得分:1)
使用预计算文本
在这里使用PrecomputedText是最好的方法之一。通过an answer阅读Giorgos Neokleous。
关闭连字符
关闭断字功能也有助于显着提高性能。您可以通过为特定的TextView设置android:hyphenationFrequency="none"
或为整个应用程序覆盖该属性来做到这一点:
<!-- res/values/styles.xml -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- ... -->
<item name="android:textViewStyle">@style/AppTextView</item>
</style>
<style name="AppTextView" parent="BaseAppTextView">
<item name="android:hyphenationFrequency">none</item>
</style>
<style name="BaseAppTextView" parent="android:Widget.TextView"/>
<!-- res/values-21/styles.xml -->
<style name="BaseAppTextView" parent="android:Widget.Material.TextView"/>
还请看几个链接:
答案 2 :(得分:0)
该文本太长。您应该将它们除以\ n(分成几段),然后将每个段落放入recyclerview的textview中。
折衷方案是用户无法选择所有文本或段落之间,但我相信最后它将是一个更好的用户体验。
然后您应该应用预计算文本。