diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5163b16c2..a720ba630 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -473,6 +473,15 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
binding.textView.setHtml(content)
- else -> binding.textView.text = content
+ else -> binding.textView.setTextAsync(content)
}
time = it.getLong("time", 0L)
}
diff --git a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt
index 03096add4..9dc94f8bc 100644
--- a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt
+++ b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt
@@ -25,13 +25,17 @@ import android.widget.TextView
import androidx.annotation.ColorInt
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.menu.MenuPopupHelper
+import androidx.appcompat.widget.AppCompatTextView
import androidx.appcompat.widget.PopupMenu
import androidx.core.graphics.record
import androidx.core.graphics.withTranslation
+import androidx.core.text.PrecomputedTextCompat
import androidx.core.view.get
+import androidx.core.widget.TextViewCompat
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager.widget.ViewPager
import io.legado.app.help.config.AppConfig
+import io.legado.app.help.globalExecutor
import io.legado.app.lib.theme.TintHelper
import splitties.systemservices.inputMethodManager
import java.lang.reflect.Field
@@ -216,6 +220,23 @@ fun TextView.setHtml(html: String) {
}
}
+fun AppCompatTextView.setTextAsync(charSequence: CharSequence) {
+ globalExecutor.execute {
+ val precomputedText = PrecomputedTextCompat.create(
+ charSequence, TextViewCompat.getTextMetricsParams(this),
+ )
+ post {
+ setPrecomputedText(precomputedText)
+ }
+ }
+}
+
+fun TextView.setTextIfNotEqual(charSequence: CharSequence?) {
+ if (text != charSequence) {
+ text = charSequence
+ }
+}
+
@SuppressLint("RestrictedApi")
fun PopupMenu.show(x: Int, y: Int) {
kotlin.runCatching {