diff --git a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt index 07f0b0d74..cb0280d48 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt @@ -38,6 +38,7 @@ import io.legado.app.ui.book.read.config.InfoConfigDialog import io.legado.app.ui.book.read.config.PaddingConfigDialog import io.legado.app.ui.book.read.config.PageKeyDialog import io.legado.app.ui.book.read.config.ShadowSetDialog +import io.legado.app.ui.book.read.config.UnderlineConfigDialog import io.legado.app.ui.file.HandleFileContract import io.legado.app.utils.ColorUtils import io.legado.app.utils.FileDoc @@ -150,6 +151,10 @@ abstract class BaseReadBookActivity : showDialogFragment() } + fun showUnderlineConfig() { + showDialogFragment() + } + fun showBgTextConfig() { showDialogFragment() } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 66b84c226..1cd6faa0d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -86,6 +86,7 @@ import io.legado.app.ui.book.read.config.TipConfigDialog.Companion.B_COLOR import io.legado.app.ui.book.read.config.TipConfigDialog.Companion.TIP_COLOR import io.legado.app.ui.book.read.config.TipConfigDialog.Companion.TIP_DIVIDER_COLOR import io.legado.app.ui.book.read.config.ToolButtonConfigDialog +import io.legado.app.ui.book.read.config.UnderlineConfigDialog.Companion.U_COLOR import io.legado.app.ui.book.read.page.ContentTextView import io.legado.app.ui.book.read.page.ReadView import io.legado.app.ui.book.read.page.entities.PageDirection @@ -1572,6 +1573,12 @@ class ReadBookActivity : BaseReadBookActivity(), setMenuCurAc(color) postEvent(EventBus.UPDATE_READ_ACTION_BAR, true) } + + U_COLOR -> { + setUnderlineColor(color) + postEvent(EventBus.UP_CONFIG, arrayListOf(2)) + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) + } } } diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/FontConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/FontConfigDialog.kt index 605272f0a..dc9456fc8 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/FontConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/FontConfigDialog.kt @@ -9,7 +9,6 @@ import io.legado.app.base.BaseBottomSheetDialogFragment import io.legado.app.constant.EventBus import io.legado.app.databinding.DialogFontConfigBinding import io.legado.app.help.config.AppConfig -import io.legado.app.help.config.ReadBookConfig.dottedLine import io.legado.app.help.config.ReadBookConfig.underline import io.legado.app.lib.dialogs.alert import io.legado.app.ui.book.read.ReadBookActivity @@ -50,8 +49,6 @@ class FontConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_font_conf private fun initView() = binding.run { binding.btnTextColor.color = ReadBookConfig.durConfig.curTextColor() binding.swUnderline.isChecked = underline - binding.swDottedline.isChecked = dottedLine - binding.swDottedline.isEnabled = underline dsbTextLetterSpacing.valueFormat = { ((it - 50) / 100f).toString() } @@ -136,18 +133,10 @@ class FontConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_font_conf } binding.swUnderline.addOnCheckedChangeListener { _, isChecked -> - underline = isChecked - binding.swDottedline.isEnabled = isChecked - if (!isChecked) { - dottedLine = false - binding.swDottedline.isChecked = false - } - postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) - } - binding.swDottedline.addOnCheckedChangeListener { _, isChecked -> - dottedLine = isChecked - postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) + callBack2?.showUnderlineConfig() + dismissAllowingStateLoss() } + binding.btnDefaultFonts.setOnClickListener { val requireContext = requireContext() alert(titleResource = R.string.system_typeface) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/UnderlineConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/UnderlineConfigDialog.kt new file mode 100644 index 000000000..7fbd5789c --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/book/read/config/UnderlineConfigDialog.kt @@ -0,0 +1,92 @@ +package io.legado.app.ui.book.read.config + +import android.os.Bundle +import android.view.View +import io.legado.app.help.config.ReadBookConfig +import com.jaredrummler.android.colorpicker.ColorPickerDialog +import io.legado.app.R +import io.legado.app.base.BaseBottomSheetDialogFragment +import io.legado.app.constant.EventBus +import io.legado.app.databinding.DialogUnderlineConfigBinding +import io.legado.app.help.config.ReadBookConfig.dottedLine +import io.legado.app.help.config.ReadBookConfig.underline +import io.legado.app.utils.observeEvent +import io.legado.app.utils.postEvent +import io.legado.app.utils.viewbindingdelegate.viewBinding + +/** + * 字体选择对话框 + */ +class UnderlineConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_underline_config) { + + companion object { + const val U_COLOR = 810 + } + + private val binding by viewBinding(DialogUnderlineConfigBinding::bind) + + override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + observeEvent>(EventBus.UP_CONFIG) { list -> + if (list.contains(2)) { + binding.btnUnderlineColor.color = ReadBookConfig.durConfig.curUnderlineColor() + } + } + initView() + } + + private fun initView() = binding.run { + binding.btnUnderlineColor.color = ReadBookConfig.durConfig.curTextColor() + binding.swUnderline.isChecked = underline + binding.swDottedline.isChecked = dottedLine + binding.swDottedline.isEnabled = underline + + binding.swUnderline.addOnCheckedChangeListener { _, isChecked -> + underline = isChecked + binding.swDottedline.isEnabled = isChecked + if (!isChecked) { + dottedLine = false + binding.swDottedline.isChecked = false + } + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) + } + + binding.swDottedline.addOnCheckedChangeListener { _, isChecked -> + dottedLine = isChecked + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) + } + + binding.btnDottedLineBlack.apply { + progress = ReadBookConfig.durConfig.dottedBase.toInt() + onChanged = { + ReadBookConfig.durConfig.dottedBase = it.toFloat() + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 8, 10)) + } + } + + binding.btnDottedLineWhile.apply { + progress = ReadBookConfig.durConfig.dottedRatio.toInt() + onChanged = { + ReadBookConfig.durConfig.dottedRatio = it.toFloat() + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 8, 10)) + } + } + + binding.btnUnderlineColor.setOnClickListener { + ColorPickerDialog.newBuilder() + .setColor(ReadBookConfig.durConfig.curUnderlineColor()) + .setShowAlphaSlider(false) + .setDialogType(ColorPickerDialog.TYPE_CUSTOM) + .setDialogId(U_COLOR) + .show(requireActivity()) + } + + binding.btnUnderlineHeight.apply { + progress = ReadBookConfig.underlineHeight + onChanged = { + ReadBookConfig.underlineHeight = it + postEvent(EventBus.UP_CONFIG, arrayListOf(8, 9, 6)) + } + } + } + +} \ No newline at end of file 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 f91997d83..010957683 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 @@ -211,16 +211,19 @@ data class TextLine( */ private fun drawUnderline(canvas: Canvas, dottedLine: Boolean) { val paint = ChapterProvider.linePaint - paint.pathEffect = - if (dottedLine && !AppConfig.isEInkMode) - ChapterProvider.dashEffect - else - null + paint.color = ReadBookConfig.durConfig.curUnderlineColor() + paint.strokeWidth = ReadBookConfig.underlineHeight.toFloat() + paint.pathEffect = if (dottedLine && !AppConfig.isEInkMode) + ChapterProvider.dashEffect + else + null + val lineY = height - 1.dpToPx() canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, paint) } + fun checkFastDraw(): Boolean { if (!AppConfig.optimizeRender || exceed || !onlyTextColumn || textPage.isMsgPage) { return 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 c0c0553aa..8ba212e30 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 @@ -66,7 +66,7 @@ object ChapterProvider { } } - val dashEffect = DashPathEffect(floatArrayOf(dottedBase, dottedRatio), 0f) + var dashEffect = DashPathEffect(floatArrayOf(dottedBase, dottedRatio), 0f) @JvmStatic var viewWidth = 0 @@ -877,6 +877,10 @@ object ChapterProvider { // reviewPaint.textSize = contentPaint.textSize * 0.45f // reviewPaint.textAlign = Paint.Align.CENTER } + dashEffect = DashPathEffect( + floatArrayOf(ReadBookConfig.durConfig.dottedBase, ReadBookConfig.durConfig.dottedRatio), + 0f + ) //间距 lineSpacingExtra = ReadBookConfig.lineSpacingExtra / 10f titleLineSpacingExtra = ReadBookConfig.titleLineSpacingExtra / 10f diff --git a/app/src/main/res/layout/dialog_font_config.xml b/app/src/main/res/layout/dialog_font_config.xml index 9e0e422e1..16b6d5b46 100644 --- a/app/src/main/res/layout/dialog_font_config.xml +++ b/app/src/main/res/layout/dialog_font_config.xml @@ -24,8 +24,9 @@ android:id="@+id/bottom_sheet_title" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginVertical="8dp" android:text="@string/text_font" - android:textSize="16sp" + android:textSize="18sp" android:textStyle="bold" /> @@ -64,15 +65,6 @@ android:checkable="true" android:focusable="true"/> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 5b99b02a7..71508b4fc 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1325,7 +1325,7 @@ 从新到旧 名称升序 名称降序 - 文字下划虚线 + 下划虚线 跳转到卷 取消选择 折叠所有卷 @@ -1340,4 +1340,8 @@ 阴影设置 段落样式 已有相同书籍 + 下划线颜色 + 实线段长 + 空隙比例 + 线段高度 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f43b99593..cccc4f264 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1326,7 +1326,7 @@ 从新到旧 名称升序 名称降序 - 文字下划虚线 + 下划虚线 跳转到卷 取消选择 折叠所有卷 @@ -1341,4 +1341,8 @@ 阴影设置 段落样式 已有相同书籍 + 下划线颜色 + 实线段长 + 空隙比例 + 线段高度