添加下划线配置
This commit is contained in:
@@ -255,6 +255,12 @@ object ReadBookConfig {
|
|||||||
config.paragraphIndent = value
|
config.paragraphIndent = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var underline: Boolean
|
||||||
|
get() = config.underline
|
||||||
|
set(value) {
|
||||||
|
config.underline = value
|
||||||
|
}
|
||||||
|
|
||||||
var paddingBottom: Int
|
var paddingBottom: Int
|
||||||
get() = config.paddingBottom
|
get() = config.paddingBottom
|
||||||
set(value) {
|
set(value) {
|
||||||
@@ -448,14 +454,14 @@ object ReadBookConfig {
|
|||||||
var bgAlpha: Int = 100,//背景透明度
|
var bgAlpha: Int = 100,//背景透明度
|
||||||
var bgType: Int = 0,//白天背景类型 0:颜色, 1:assets图片, 2其它图片
|
var bgType: Int = 0,//白天背景类型 0:颜色, 1:assets图片, 2其它图片
|
||||||
var bgTypeNight: Int = 0,//夜间背景类型
|
var bgTypeNight: Int = 0,//夜间背景类型
|
||||||
var bgTypeEInk: Int = 0,
|
var bgTypeEInk: Int = 0,//EInk背景类型
|
||||||
private var darkStatusIcon: Boolean = true,//白天是否暗色状态栏
|
private var darkStatusIcon: Boolean = true,//白天是否暗色状态栏
|
||||||
private var darkStatusIconNight: Boolean = false,//晚上是否暗色状态栏
|
private var darkStatusIconNight: Boolean = false,//晚上是否暗色状态栏
|
||||||
private var darkStatusIconEInk: Boolean = true,
|
private var darkStatusIconEInk: Boolean = true,
|
||||||
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 pageAnim: Int = 0,
|
private var pageAnim: Int = 0,//翻页动画
|
||||||
private var pageAnimEInk: Int = 3,
|
private var pageAnimEInk: Int = 3,
|
||||||
var textFont: String = "",//字体
|
var textFont: String = "",//字体
|
||||||
var textBold: Int = 0,//是否粗体字 0:正常, 1:粗体, 2:细体
|
var textBold: Int = 0,//是否粗体字 0:正常, 1:粗体, 2:细体
|
||||||
@@ -468,6 +474,7 @@ object ReadBookConfig {
|
|||||||
var titleTopSpacing: Int = 0,
|
var titleTopSpacing: Int = 0,
|
||||||
var titleBottomSpacing: Int = 0,
|
var titleBottomSpacing: Int = 0,
|
||||||
var paragraphIndent: String = " ",//段落缩进
|
var paragraphIndent: String = " ",//段落缩进
|
||||||
|
var underline: Boolean = false, //下划线
|
||||||
var paddingBottom: Int = 6,
|
var paddingBottom: Int = 6,
|
||||||
var paddingLeft: Int = 16,
|
var paddingLeft: Int = 16,
|
||||||
var paddingRight: Int = 16,
|
var paddingRight: Int = 16,
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
|
|||||||
ivEdit.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN)
|
ivEdit.setColorFilter(secondaryTextColor, PorterDuff.Mode.SRC_IN)
|
||||||
tvRestore.setTextColor(primaryTextColor)
|
tvRestore.setTextColor(primaryTextColor)
|
||||||
swDarkStatusIcon.setTextColor(primaryTextColor)
|
swDarkStatusIcon.setTextColor(primaryTextColor)
|
||||||
|
swUnderline.setTextColor(primaryTextColor)
|
||||||
ivImport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
|
ivImport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
|
||||||
ivExport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
|
ivExport.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
|
||||||
ivDelete.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
|
ivDelete.setColorFilter(primaryTextColor, PorterDuff.Mode.SRC_IN)
|
||||||
@@ -138,6 +139,7 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
|
|||||||
private fun initData() = with(ReadBookConfig.durConfig) {
|
private fun initData() = with(ReadBookConfig.durConfig) {
|
||||||
binding.tvName.text = name.ifBlank { "文字" }
|
binding.tvName.text = name.ifBlank { "文字" }
|
||||||
binding.swDarkStatusIcon.isChecked = curStatusIconDark()
|
binding.swDarkStatusIcon.isChecked = curStatusIconDark()
|
||||||
|
binding.swUnderline.isChecked = underline
|
||||||
binding.sbBgAlpha.progress = bgAlpha
|
binding.sbBgAlpha.progress = bgAlpha
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,6 +176,10 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
|
|||||||
setCurStatusIconDark(isChecked)
|
setCurStatusIconDark(isChecked)
|
||||||
(activity as? ReadBookActivity)?.upSystemUiVisibility()
|
(activity as? ReadBookActivity)?.upSystemUiVisibility()
|
||||||
}
|
}
|
||||||
|
binding.swUnderline.setOnCheckedChangeListener { _, isChecked ->
|
||||||
|
underline = isChecked
|
||||||
|
postEvent(EventBus.UP_CONFIG, true)
|
||||||
|
}
|
||||||
binding.tvTextColor.setOnClickListener {
|
binding.tvTextColor.setOnClickListener {
|
||||||
ColorPickerDialog.newBuilder()
|
ColorPickerDialog.newBuilder()
|
||||||
.setColor(curTextColor())
|
.setColor(curTextColor())
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
private fun drawPage(canvas: Canvas) {
|
private fun drawPage(canvas: Canvas) {
|
||||||
var relativeOffset = relativeOffset(0)
|
var relativeOffset = relativeOffset(0)
|
||||||
textPage.lines.forEach { textLine ->
|
textPage.lines.forEach { textLine ->
|
||||||
draw(canvas, textPage, textLine, relativeOffset)
|
drawLine(canvas, textPage, textLine, relativeOffset)
|
||||||
}
|
}
|
||||||
if (!callBack.isScroll) return
|
if (!callBack.isScroll) return
|
||||||
//滚动翻页
|
//滚动翻页
|
||||||
@@ -122,14 +122,14 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
val textPage1 = relativePage(1)
|
val textPage1 = relativePage(1)
|
||||||
relativeOffset = relativeOffset(1)
|
relativeOffset = relativeOffset(1)
|
||||||
textPage1.lines.forEach { textLine ->
|
textPage1.lines.forEach { textLine ->
|
||||||
draw(canvas, textPage1, textLine, relativeOffset)
|
drawLine(canvas, textPage1, textLine, relativeOffset)
|
||||||
}
|
}
|
||||||
if (!pageFactory.hasNextPlus()) return
|
if (!pageFactory.hasNextPlus()) return
|
||||||
relativeOffset = relativeOffset(2)
|
relativeOffset = relativeOffset(2)
|
||||||
if (relativeOffset < ChapterProvider.visibleHeight) {
|
if (relativeOffset < ChapterProvider.visibleHeight) {
|
||||||
val textPage2 = relativePage(2)
|
val textPage2 = relativePage(2)
|
||||||
textPage2.lines.forEach { textLine ->
|
textPage2.lines.forEach { textLine ->
|
||||||
draw(canvas, textPage2, textLine, relativeOffset)
|
drawLine(canvas, textPage2, textLine, relativeOffset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -137,7 +137,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
/**
|
/**
|
||||||
* 绘制页面
|
* 绘制页面
|
||||||
*/
|
*/
|
||||||
private fun draw(
|
private fun drawLine(
|
||||||
canvas: Canvas,
|
canvas: Canvas,
|
||||||
textPage: TextPage,
|
textPage: TextPage,
|
||||||
textLine: TextLine,
|
textLine: TextLine,
|
||||||
@@ -147,6 +147,22 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
|
|||||||
val lineBase = textLine.lineBase + relativeOffset
|
val lineBase = textLine.lineBase + relativeOffset
|
||||||
val lineBottom = textLine.lineBottom + relativeOffset
|
val lineBottom = textLine.lineBottom + relativeOffset
|
||||||
drawChars(canvas, textPage, textLine, lineTop, lineBase, lineBottom)
|
drawChars(canvas, textPage, textLine, lineTop, lineBase, lineBottom)
|
||||||
|
if (ReadBookConfig.underline) {
|
||||||
|
drawUnderline(canvas, textLine, lineBottom)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绘制下划线
|
||||||
|
*/
|
||||||
|
private fun drawUnderline(canvas: Canvas, textLine: TextLine, lineY: Float) {
|
||||||
|
canvas.drawLine(
|
||||||
|
textLine.lineStart,
|
||||||
|
lineY,
|
||||||
|
textLine.lineEnd,
|
||||||
|
lineY,
|
||||||
|
ChapterProvider.contentPaint
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -62,6 +62,14 @@
|
|||||||
android:text="@string/dark_status_icon"
|
android:text="@string/dark_status_icon"
|
||||||
tools:ignore="TouchTargetSizeCheck" />
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
|
<io.legado.app.lib.theme.view.ThemeSwitch
|
||||||
|
android:id="@+id/sw_underline"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="6dp"
|
||||||
|
android:text="@string/text_underline"
|
||||||
|
tools:ignore="TouchTargetSizeCheck" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
@@ -1091,4 +1091,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1094,4 +1094,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1094,4 +1094,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1091,4 +1091,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1093,4 +1093,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1093,4 +1093,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1094,4 +1094,5 @@
|
|||||||
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
<string name="file_manage_summary">管理私有文件夹的文件</string>
|
||||||
<string name="create_folder">创建文件夹</string>
|
<string name="create_folder">创建文件夹</string>
|
||||||
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
<string name="allow_drop_down_refresh">允许下拉刷新</string>
|
||||||
|
<string name="text_underline">文字下划线</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user