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 {