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) appCtx.putPrefBoolean(PreferKey.shareLayout, value)
} }
} }
/**
* 两端对齐
*/
val textFullJustify get() = appCtx.getPrefBoolean(PreferKey.textFullJustify, true) val textFullJustify get() = appCtx.getPrefBoolean(PreferKey.textFullJustify, true)
/**
* 底部对齐
*/
val textBottomJustify get() = appCtx.getPrefBoolean(PreferKey.textBottomJustify, true) val textBottomJustify get() = appCtx.getPrefBoolean(PreferKey.textBottomJustify, true)
var hideStatusBar = appCtx.getPrefBoolean(PreferKey.hideStatusBar) var hideStatusBar = appCtx.getPrefBoolean(PreferKey.hideStatusBar)
var hideNavigationBar = appCtx.getPrefBoolean(PreferKey.hideNavigationBar) var hideNavigationBar = appCtx.getPrefBoolean(PreferKey.hideNavigationBar)

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

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

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

Loading…
Cancel
Save