From 82c2f187a57abd0619baf2a1aeab18645bc09934 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Tue, 30 Sep 2025 00:36:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=A4=B1=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kazusa/ui/book/read/ContentEditDialog.kt | 60 ++++++++++++++----- .../main/res/layout/dialog_content_edit.xml | 29 ++++++--- 2 files changed, 65 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/ContentEditDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/ContentEditDialog.kt index d3649f261..1389e378d 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/ContentEditDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/ContentEditDialog.kt @@ -1,16 +1,17 @@ package io.legato.kazusa.ui.book.read -//import io.legado.app.lib.theme.primaryColor import android.app.Application import android.content.DialogInterface import android.os.Bundle +import android.text.Spannable +import android.text.Spanned +import android.text.style.BackgroundColorSpan import android.view.View -import android.view.ViewGroup import androidx.fragment.app.viewModels import androidx.lifecycle.MutableLiveData import androidx.lifecycle.lifecycleScope import io.legato.kazusa.R -import io.legato.kazusa.base.BaseDialogFragment +import io.legato.kazusa.base.BaseBottomSheetDialogFragment import io.legato.kazusa.base.BaseViewModel import io.legato.kazusa.data.appDb import io.legato.kazusa.data.entities.BookChapter @@ -25,7 +26,7 @@ import io.legato.kazusa.model.ReadBook import io.legato.kazusa.model.webBook.WebBook import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.sendToClip -import io.legato.kazusa.utils.setLayout +import io.legato.kazusa.utils.themeColor import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import io.legato.kazusa.utils.visible import kotlinx.coroutines.Dispatchers.IO @@ -35,16 +36,11 @@ import kotlinx.coroutines.withContext /** * 内容编辑 */ -class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) { +class ContentEditDialog : BaseBottomSheetDialogFragment(R.layout.dialog_content_edit) { val binding by viewBinding(DialogContentEditBinding::bind) val viewModel by viewModels() - override fun onStart() { - super.onStart() - setLayout(1f, ViewGroup.LayoutParams.MATCH_PARENT) - } - override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { //binding.toolBar.setBackgroundColor(primaryColor) binding.toolBar.title = ReadBook.curTextChapter?.title @@ -68,13 +64,18 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) { viewModel.initContent { binding.contentView.setText(it) binding.contentView.post { - binding.contentView.apply { - val lineIndex = layout.getLineForOffset(ReadBook.durChapterPos) - val lineHeight = layout.getLineTop(lineIndex) - scrollTo(0, lineHeight) - } + val layout = binding.contentView.layout ?: return@post + val targetY = binding.contentView.top + + layout.getLineTop( + layout.getLineForOffset(ReadBook.durChapterPos) + ) + + binding.scrollView.smoothScrollTo(0, targetY) + + highlightCurrentLineTwice() } } + } private fun initMenu() { @@ -116,6 +117,35 @@ class ContentEditDialog : BaseDialogFragment(R.layout.dialog_content_edit) { } } + private fun highlightCurrentLineTwice() { + val editText = binding.contentView + val layout = editText.layout ?: return + val offset = ReadBook.durChapterPos + val lineIndex = layout.getLineForOffset(offset) + + val start = layout.getLineStart(lineIndex) + val end = layout.getLineEnd(lineIndex) + + val spannable = editText.text as Spannable + val span = + BackgroundColorSpan(requireContext().themeColor(com.google.android.material.R.attr.colorSecondaryContainer)) + + + fun flash(times: Int) { + if (times <= 0) return + spannable.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) + editText.postDelayed({ + spannable.removeSpan(span) + editText.postDelayed({ + flash(times - 1) + }, 200) + }, 300) + } + + flash(3) + } + + override fun onCancel(dialog: DialogInterface) { super.onCancel(dialog) save() diff --git a/app/src/main/res/layout/dialog_content_edit.xml b/app/src/main/res/layout/dialog_content_edit.xml index 4184e577b..03ed722e9 100644 --- a/app/src/main/res/layout/dialog_content_edit.xml +++ b/app/src/main/res/layout/dialog_content_edit.xml @@ -2,7 +2,7 @@ - + android:layout_height="wrap_content" + app:layout_constraintTop_toBottomOf="@id/tool_bar"> + + + + + +