[新增] 正文强调色设置 (@Luoyacheng)

This commit is contained in:
HapeLee
2026-01-10 03:31:25 +08:00
parent 6d5bf0828e
commit e31a6deed3
8 changed files with 115 additions and 24 deletions
@@ -5,6 +5,7 @@ import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.annotation.Keep import androidx.annotation.Keep
import androidx.core.graphics.drawable.toDrawable
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import com.google.android.material.color.MaterialColors import com.google.android.material.color.MaterialColors
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
@@ -27,14 +28,11 @@ import io.legado.app.utils.getPrefBoolean
import io.legado.app.utils.getPrefInt import io.legado.app.utils.getPrefInt
import io.legado.app.utils.hexString import io.legado.app.utils.hexString
import io.legado.app.utils.printOnDebug import io.legado.app.utils.printOnDebug
import io.legado.app.utils.putPrefBoolean
import io.legado.app.utils.putPrefInt import io.legado.app.utils.putPrefInt
import io.legado.app.utils.resizeAndRecycle import io.legado.app.utils.resizeAndRecycle
import splitties.init.appCtx import splitties.init.appCtx
import java.io.File import java.io.File
import kotlin.String
import androidx.core.graphics.drawable.toDrawable
import io.legado.app.utils.FileDoc
import io.legado.app.utils.putPrefBoolean
/** /**
* 阅读界面配置 * 阅读界面配置
@@ -61,6 +59,7 @@ object ReadBookConfig {
var bg: Drawable? = null var bg: Drawable? = null
var bgMeanColor: Int = 0 var bgMeanColor: Int = 0
val textColor: Int get() = durConfig.curTextColor() val textColor: Int get() = durConfig.curTextColor()
val textAccentColor: Int get() = durConfig.curTextAccentColor()
val textShadowColor: Int get() = durConfig.curTextShadowColor() val textShadowColor: Int get() = durConfig.curTextShadowColor()
val menuColor: Int get() = durConfig.curMenuAc() val menuColor: Int get() = durConfig.curMenuAc()
init { init {
@@ -603,6 +602,7 @@ object ReadBookConfig {
config.bgStrEInk.toColorInt() config.bgStrEInk.toColorInt()
} }
config.curTextColor() config.curTextColor()
config.curTextAccentColor()
return config return config
} }
@@ -626,6 +626,9 @@ object ReadBookConfig {
private var textColor: String = "#3E3D3B",//白天文字颜色 private var textColor: String = "#3E3D3B",//白天文字颜色
private var textColorNight: String = "#ADADAD",//夜间文字颜色 private var textColorNight: String = "#ADADAD",//夜间文字颜色
private var textColorEInk: String = "#000000", private var textColorEInk: String = "#000000",
private var textAccentColor: String = "#834E00",//白天强调文字颜色
private var textAccentColorNight: String = "#FE4D55",//夜间强调文字颜色
private var textAccentColorEInk: String = "#000000",
private var pageAnim: Int = 0,//翻页动画 private var pageAnim: Int = 0,//翻页动画
private var pageAnimEInk: Int = 4, private var pageAnimEInk: Int = 4,
var textFont: String = "",//字体 var textFont: String = "",//字体
@@ -718,6 +721,18 @@ object ReadBookConfig {
@Transient @Transient
private var underlineColorNightInt = -1 private var underlineColorNightInt = -1
@Transient
private var textAccentColorIntEInk = -1
@Transient
private var textAccentColorIntNight = -1
@Transient
private var textAccentColorInt = -1
@Transient
private var initAccentColorInt = false
@Transient @Transient
private var initColorInt = false private var initColorInt = false
@@ -760,6 +775,43 @@ object ReadBookConfig {
initColorInt = true initColorInt = true
} }
private fun initAccentColorInt() {
textAccentColorIntEInk = textAccentColorEInk.toColorInt()
textAccentColorIntNight = textAccentColorNight.toColorInt()
textAccentColorInt = textAccentColor.toColorInt()
initAccentColorInt = true
}
fun setCurTextAccentColor(color: Int) {
when {
AppConfig.isEInkMode -> {
textAccentColorEInk = "#${color.hexString}"
textAccentColorIntEInk = color
}
AppConfig.isNightTheme -> {
textAccentColorNight = "#${color.hexString}"
textAccentColorIntNight = color
}
else -> {
textAccentColor = "#${color.hexString}"
textAccentColorInt = color
}
}
}
fun curTextAccentColor(): Int {
if (!initAccentColorInt) {
initAccentColorInt()
}
return when {
AppConfig.isEInkMode -> textAccentColorIntEInk
AppConfig.isNightTheme -> textAccentColorIntNight
else -> textAccentColorInt
}
}
fun setCurShadColor(color: Int){ fun setCurShadColor(color: Int){
when { when {
AppConfig.isNightTheme -> { AppConfig.isNightTheme -> {
@@ -76,8 +76,9 @@ import io.legado.app.ui.book.info.BookInfoActivity
import io.legado.app.ui.book.read.config.AutoReadDialog import io.legado.app.ui.book.read.config.AutoReadDialog
import io.legado.app.ui.book.read.config.BgTextConfigDialog.Companion.BG_COLOR import io.legado.app.ui.book.read.config.BgTextConfigDialog.Companion.BG_COLOR
import io.legado.app.ui.book.read.config.FontConfigDialog import io.legado.app.ui.book.read.config.FontConfigDialog
import io.legado.app.ui.book.read.config.FontConfigDialog.Companion.TEXT_COLOR
import io.legado.app.ui.book.read.config.FontConfigDialog.Companion.S_COLOR import io.legado.app.ui.book.read.config.FontConfigDialog.Companion.S_COLOR
import io.legado.app.ui.book.read.config.FontConfigDialog.Companion.TEXT_ACCENT_COLOR
import io.legado.app.ui.book.read.config.FontConfigDialog.Companion.TEXT_COLOR
import io.legado.app.ui.book.read.config.FontSelectDialog import io.legado.app.ui.book.read.config.FontSelectDialog
import io.legado.app.ui.book.read.config.ReadAloudDialog import io.legado.app.ui.book.read.config.ReadAloudDialog
import io.legado.app.ui.book.read.config.ReadStyleDialog import io.legado.app.ui.book.read.config.ReadStyleDialog
@@ -1529,10 +1530,10 @@ class ReadBookActivity : BaseReadBookActivity(),
} }
val (result, urlOptionStr) = when { val (result, urlOptionStr) = when {
braceIndex != -1 -> { braceIndex != -1 -> {
clickjs.substring(0, braceIndex) to clickjs.substring(braceIndex + 1) clickjs.take(braceIndex) to clickjs.substring(braceIndex + 1)
} }
else -> { else -> {
clickjs.substring(0, braceIndex2) to clickjs.substring(braceIndex2 + 2) clickjs.take(braceIndex2) to clickjs.substring(braceIndex2 + 2)
} }
} }
if (urlOptionStr.isJsonObject()) { if (urlOptionStr.isJsonObject()) {
@@ -1602,6 +1603,7 @@ class ReadBookActivity : BaseReadBookActivity(),
setCurShadColor(color) setCurShadColor(color)
postEvent(EventBus.UP_CONFIG, arrayListOf(2, 6, 9, 11)) postEvent(EventBus.UP_CONFIG, arrayListOf(2, 6, 9, 11))
} }
TEXT_COLOR -> { TEXT_COLOR -> {
setCurTextColor(color) setCurTextColor(color)
postEvent(EventBus.UP_CONFIG, arrayListOf(2, 6, 9, 11)) postEvent(EventBus.UP_CONFIG, arrayListOf(2, 6, 9, 11))
@@ -1610,6 +1612,14 @@ class ReadBookActivity : BaseReadBookActivity(),
} }
} }
TEXT_ACCENT_COLOR -> {
setCurTextAccentColor(color)
postEvent(EventBus.UP_CONFIG, arrayListOf(2, 6, 9, 11))
if (AppConfig.readBarStyleFollowPage) {
postEvent(EventBus.UPDATE_READ_ACTION_BAR, true)
}
}
BG_COLOR -> { BG_COLOR -> {
setCurBg(0, "#${color.hexString}") setCurBg(0, "#${color.hexString}")
postEvent(EventBus.UP_CONFIG, arrayListOf(1)) postEvent(EventBus.UP_CONFIG, arrayListOf(1))
@@ -2,13 +2,13 @@ package io.legado.app.ui.book.read.config
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import io.legado.app.help.config.ReadBookConfig
import com.jaredrummler.android.colorpicker.ColorPickerDialog import com.jaredrummler.android.colorpicker.ColorPickerDialog
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseBottomSheetDialogFragment import io.legado.app.base.BaseBottomSheetDialogFragment
import io.legado.app.constant.EventBus import io.legado.app.constant.EventBus
import io.legado.app.databinding.DialogFontConfigBinding import io.legado.app.databinding.DialogFontConfigBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ReadBookConfig
import io.legado.app.help.config.ReadBookConfig.underline import io.legado.app.help.config.ReadBookConfig.underline
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
@@ -24,6 +24,7 @@ class FontConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_font_conf
companion object { companion object {
const val S_COLOR = 123 const val S_COLOR = 123
const val TEXT_COLOR = 121 const val TEXT_COLOR = 121
const val TEXT_ACCENT_COLOR = 122
} }
private val binding by viewBinding(DialogFontConfigBinding::bind) private val binding by viewBinding(DialogFontConfigBinding::bind)
@@ -39,6 +40,7 @@ class FontConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_font_conf
if (list.contains(2)) { if (list.contains(2)) {
binding.btnTextColor.color = ReadBookConfig.durConfig.curTextColor() binding.btnTextColor.color = ReadBookConfig.durConfig.curTextColor()
binding.btnShadowColor.color = ReadBookConfig.durConfig.curTextShadowColor() binding.btnShadowColor.color = ReadBookConfig.durConfig.curTextShadowColor()
binding.btnTextAccentColor.color = ReadBookConfig.durConfig.curTextAccentColor()
} }
} }
initView() initView()
@@ -48,6 +50,8 @@ class FontConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_font_conf
private fun initView() = binding.run { private fun initView() = binding.run {
binding.btnTextColor.color = ReadBookConfig.durConfig.curTextColor() binding.btnTextColor.color = ReadBookConfig.durConfig.curTextColor()
binding.btnShadowColor.color = ReadBookConfig.durConfig.curTextShadowColor()
binding.btnTextAccentColor.color = ReadBookConfig.durConfig.curTextAccentColor()
binding.swUnderline.isChecked = underline binding.swUnderline.isChecked = underline
dsbTextLetterSpacing.valueFormat = { dsbTextLetterSpacing.valueFormat = {
((it - 50) / 100f).toString() ((it - 50) / 100f).toString()
@@ -129,7 +133,14 @@ class FontConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_font_conf
.setDialogId(TEXT_COLOR) .setDialogId(TEXT_COLOR)
.show(requireActivity()) .show(requireActivity())
} }
binding.btnTextAccentColor.setOnClickListener {
ColorPickerDialog.newBuilder()
.setColor(ReadBookConfig.durConfig.curTextAccentColor())
.setShowAlphaSlider(false)
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
.setDialogId(TEXT_ACCENT_COLOR)
.show(requireActivity())
}
binding.swUnderline.addOnCheckedChangeListener { _, isChecked -> binding.swUnderline.addOnCheckedChangeListener { _, isChecked ->
callBack2?.showUnderlineConfig() callBack2?.showUnderlineConfig()
} }
@@ -177,7 +177,7 @@ data class TextLine(
ChapterProvider.contentPaint ChapterProvider.contentPaint
} }
val textColor = if (isReadAloud) { val textColor = if (isReadAloud) {
ReadBookConfig.menuColor ReadBookConfig.textAccentColor
} else { } else {
ReadBookConfig.textColor ReadBookConfig.textColor
} }
@@ -8,7 +8,6 @@ import io.legado.app.ui.book.read.page.ContentTextView
import io.legado.app.ui.book.read.page.entities.TextLine import io.legado.app.ui.book.read.page.entities.TextLine
import io.legado.app.ui.book.read.page.entities.TextLine.Companion.emptyTextLine import io.legado.app.ui.book.read.page.entities.TextLine.Companion.emptyTextLine
import io.legado.app.ui.book.read.page.provider.ChapterProvider import io.legado.app.ui.book.read.page.provider.ChapterProvider
import io.legado.app.utils.themeColor
/** /**
* 文字列 * 文字列
@@ -49,7 +48,7 @@ data class TextColumn(
ChapterProvider.contentPaint ChapterProvider.contentPaint
} }
val textColor = if (textLine.isReadAloud || isSearchResult) { val textColor = if (textLine.isReadAloud || isSearchResult) {
view.context.themeColor(androidx.appcompat.R.attr.colorPrimary) ReadBookConfig.textAccentColor
} else { } else {
ReadBookConfig.textColor ReadBookConfig.textColor
} }
+24 -9
View File
@@ -81,8 +81,25 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:icon="@drawable/ic_text_weight_2"/> app:icon="@drawable/ic_text_weight_2"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnShadowSet"
style="@style/Widget.Material3Expressive.Button.IconButton.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_fill_colors" />
</com.google.android.material.button.MaterialButtonGroup> </com.google.android.material.button.MaterialButtonGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
android:text="@string/read_color"
android:textSize="14sp"
android:textStyle="bold" />
<com.google.android.material.button.MaterialButtonGroup <com.google.android.material.button.MaterialButtonGroup
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -97,6 +114,13 @@
style="@style/Widget.Material3Expressive.Button.OutlinedButton" style="@style/Widget.Material3Expressive.Button.OutlinedButton"
android:text="@string/text_color" /> android:text="@string/text_color" />
<io.legado.app.ui.widget.AccentColorButton
android:id="@+id/btn_text_accent_color"
style="@style/Widget.Material3Expressive.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_accent_color" />
<io.legado.app.ui.widget.AccentColorButton <io.legado.app.ui.widget.AccentColorButton
android:id="@+id/btnShadowColor" android:id="@+id/btnShadowColor"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@@ -104,15 +128,6 @@
style="@style/Widget.Material3Expressive.Button.OutlinedButton" style="@style/Widget.Material3Expressive.Button.OutlinedButton"
android:text="@string/text_shadow_color" /> android:text="@string/text_shadow_color" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnShadowSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.Material3Expressive.Button.IconButton.Outlined"
app:iconSize="20sp"
app:iconGravity="textStart"
app:icon="@drawable/ic_fill_colors" />
</com.google.android.material.button.MaterialButtonGroup> </com.google.android.material.button.MaterialButtonGroup>
<LinearLayout <LinearLayout
+4 -2
View File
@@ -577,7 +577,7 @@
<string name="speak_engine">朗读引擎</string> <string name="speak_engine">朗读引擎</string>
<string name="bg_image">背景图片</string> <string name="bg_image">背景图片</string>
<string name="bg_color">背景颜色</string> <string name="bg_color">背景颜色</string>
<string name="text_color">字颜色</string> <string name="text_color"></string>
<string name="select_image">选择图片</string> <string name="select_image">选择图片</string>
<string name="group_manage">分组管理</string> <string name="group_manage">分组管理</string>
<string name="group_select">分组选择</string> <string name="group_select">分组选择</string>
@@ -1306,7 +1306,7 @@
<string name="text_shadow_x">X轴距离</string> <string name="text_shadow_x">X轴距离</string>
<string name="text_shadow_y">Y轴距离</string> <string name="text_shadow_y">Y轴距离</string>
<string name="text_shadow_radius">阴影半径</string> <string name="text_shadow_radius">阴影半径</string>
<string name="text_shadow_color">阴影颜色</string> <string name="text_shadow_color">阴影</string>
<string name="global_read_setting">阅读显示 • 漫画相关</string> <string name="global_read_setting">阅读显示 • 漫画相关</string>
<string name="screen_settings">屏幕显示与亮度</string> <string name="screen_settings">屏幕显示与亮度</string>
<string name="reading_behavior">阅读行为</string> <string name="reading_behavior">阅读行为</string>
@@ -1364,4 +1364,6 @@
<string name="edit_remark">编辑备注</string> <string name="edit_remark">编辑备注</string>
<string name="book_remark">书籍备注</string> <string name="book_remark">书籍备注</string>
<string name="auto_check_new_backup_t">自动检查新备份</string> <string name="auto_check_new_backup_t">自动检查新备份</string>
<string name="text_accent_color">强调</string>
<string name="read_color">颜色样式</string>
</resources> </resources>
+3 -1
View File
@@ -1309,7 +1309,7 @@
<string name="text_shadow_x">X轴距离</string> <string name="text_shadow_x">X轴距离</string>
<string name="text_shadow_y">Y轴距离</string> <string name="text_shadow_y">Y轴距离</string>
<string name="text_shadow_radius">阴影半径</string> <string name="text_shadow_radius">阴影半径</string>
<string name="text_shadow_color">阴影颜色</string> <string name="text_shadow_color">阴影</string>
<string name="global_read_setting">阅读显示 • 漫画相关</string> <string name="global_read_setting">阅读显示 • 漫画相关</string>
<string name="screen_settings">屏幕显示与亮度</string> <string name="screen_settings">屏幕显示与亮度</string>
<string name="reading_behavior">阅读行为</string> <string name="reading_behavior">阅读行为</string>
@@ -1369,4 +1369,6 @@
<string name="book_remark">书籍备注</string> <string name="book_remark">书籍备注</string>
<string name="save_to_local">保存至本地</string> <string name="save_to_local">保存至本地</string>
<string name="select_operation">选择操作</string> <string name="select_operation">选择操作</string>
<string name="text_accent_color">强调</string>
<string name="read_color">颜色样式</string>
</resources> </resources>