diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt index 729329a4c..0b9166ef4 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt @@ -396,9 +396,10 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at val compareEnd = pos.compare(selectEnd) if (compareStart >= 0 && compareEnd <= 0) { builder.append(textChar.charData) - if (compareEnd != 0 + if ( + textLine.isLastLine && charIndex == textLine.charSize - 1 - && textLine.text.endsWith("\n") + && compareEnd != 0 ) { builder.append("\n") } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 7d90054c9..a93d4da00 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -276,12 +276,12 @@ class ReadView(context: Context, attrs: AttributeSet) : private fun onLongPress() { kotlin.runCatching { curPage.selectText(startX, startY) { relativePage, lineIndex, charIndex -> + isTextSelected = true + firstRelativePage = relativePage + firstLineIndex = lineIndex + firstCharIndex = charIndex val page = curPage.relativePage(relativePage) with(page) { - isTextSelected = true - firstRelativePage = relativePage - firstLineIndex = lineIndex - firstCharIndex = charIndex var lineStart = lineIndex var lineEnd = lineIndex var start: Int diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt index 53eb60cec..82c042389 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt @@ -12,6 +12,7 @@ data class TextLine( var lineBase: Float = 0f, var lineBottom: Float = 0f, val isTitle: Boolean = false, + var isLastLine: Boolean = false, var isReadAloud: Boolean = false, var isImage: Boolean = false ) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt index 4b7fb2168..6efc31503 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt @@ -331,7 +331,6 @@ object ChapterProvider { val words = text.substring(layout.getLineStart(lineIndex), layout.getLineEnd(lineIndex)) val desiredWidth = layout.getLineWidth(lineIndex) - var isLastLine = false when { lineIndex == 0 && layout.lineCount > 1 && !isTitle -> { //第一行 非标题 @@ -347,8 +346,8 @@ object ChapterProvider { } lineIndex == layout.lineCount - 1 -> { //最后一行 - textLine.text = "$words\n" - isLastLine = true + textLine.text = words + textLine.isLastLine = true //标题x轴居中 val startX = if (isTitle && ReadBookConfig.titleMode == 1 || isTitleWithNoContent || isVolumeTitle) @@ -378,7 +377,7 @@ object ChapterProvider { } } stringBuilder.append(words) - if (isLastLine) stringBuilder.append("\n") + if (textLine.isLastLine) stringBuilder.append("\n") textPages.last().textLines.add(textLine) textLine.upTopBottom(durY, textPaint) durY += textPaint.textHeight * lineSpacingExtra