pull/2731/head
kunfei 2 years ago
parent 770ab70a0d
commit 06fce75725
  1. 8
      app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt
  2. 19
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt
  3. 2
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ZhLayout.kt
  4. 8
      app/src/main/java/io/legado/app/utils/StringExtensions.kt

@ -154,7 +154,15 @@ object ReadBookConfig {
appCtx.putPrefBoolean(PreferKey.shareLayout, value)
}
}
/**
* 两端对齐
*/
val textFullJustify get() = appCtx.getPrefBoolean(PreferKey.textFullJustify, true)
/**
* 底部对齐
*/
val textBottomJustify get() = appCtx.getPrefBoolean(PreferKey.textBottomJustify, true)
var hideStatusBar = appCtx.getPrefBoolean(PreferKey.hideStatusBar)
var hideNavigationBar = appCtx.getPrefBoolean(PreferKey.hideNavigationBar)

@ -300,10 +300,11 @@ object ChapterProvider {
srcList: LinkedList<String>? = null
): Pair<Int, Float> {
var absStartX = x
val layout = if (ReadBookConfig.useZhLayout) ZhLayout(text, textPaint, visibleWidth)
else StaticLayout(
text, textPaint, visibleWidth, Layout.Alignment.ALIGN_NORMAL, 0f, 0f, true
)
val layout = if (ReadBookConfig.useZhLayout) {
ZhLayout(text, textPaint, visibleWidth)
} else {
StaticLayout(text, textPaint, visibleWidth, Layout.Alignment.ALIGN_NORMAL, 0f, 0f, true)
}
var durY = when {
//标题y轴居中
isTitleWithNoContent && textPages.size == 1 -> {
@ -375,7 +376,7 @@ object ChapterProvider {
} else {
0f
}
addCharsToLineLast(
addCharsToLineNatural(
book, absStartX, textLine, words.toStringArray(),
textPaint, startX, srcList
)
@ -416,7 +417,7 @@ object ChapterProvider {
) {
var x = 0f
if (!ReadBookConfig.textFullJustify) {
addCharsToLineLast(book, absStartX, textLine, words, textPaint, x, srcList)
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, x, srcList)
return
}
val bodyIndent = ReadBookConfig.paragraphIndent
@ -454,7 +455,7 @@ object ChapterProvider {
srcList: LinkedList<String>?
) {
if (!ReadBookConfig.textFullJustify) {
addCharsToLineLast(book, absStartX, textLine, words, textPaint, startX, srcList)
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, startX, srcList)
return
}
val gapCount: Int = words.lastIndex
@ -470,9 +471,9 @@ object ChapterProvider {
}
/**
* 最后一行,自然排列
* 自然排列
*/
private suspend fun addCharsToLineLast(
private suspend fun addCharsToLineNatural(
book: Book,
absStartX: Int,
textLine: TextLine,

@ -12,7 +12,7 @@ import kotlin.math.max
* */
@Suppress("MemberVisibilityCanBePrivate", "unused")
class ZhLayout(
text: String,
text: CharSequence,
textPaint: TextPaint,
width: Int
) : Layout(text, textPaint, width, Alignment.ALIGN_NORMAL, 0f, 0f) {

@ -8,6 +8,8 @@ import android.net.Uri
import android.text.Editable
import io.legado.app.constant.AppPattern.dataUriRegex
import java.io.File
import java.lang.Character.codePointCount
import java.lang.Character.offsetByCodePoints
import java.util.*
fun String?.safeTrim() = if (this.isNullOrBlank()) null else this.trim()
@ -100,12 +102,12 @@ fun String?.memorySize(): Int {
/**
* 将字符串拆分为单个字符,包含emoji
*/
fun String.toStringArray(): Array<String> {
fun CharSequence.toStringArray(): Array<String> {
var codePointIndex = 0
return try {
Array(codePointCount(0, length)) {
Array(codePointCount(this, 0, length)) {
val start = codePointIndex
codePointIndex = offsetByCodePoints(start, 1)
codePointIndex = offsetByCodePoints(this, start, 1)
substring(start, codePointIndex)
}
} catch (e: Exception) {

Loading…
Cancel
Save