Просмотр исходного кода

fix: 顶部提示条避让状态栏,书签角标改为黄色书签样式

- 下拉提示条是 ReadView 的直接子 View,edge-to-edge 下会被状态栏盖住;
  每次显示前按当前系统栏顶部 inset 垫高 topMargin,状态栏隐藏时自然回落
- 书签角标从主题色图标改为固定黄色的书签丝带(底部 V 形缺口,ic_bookmark_badge),
  尺寸调为 10x20dp 竖向丝带,不再随主题变色
HapeLee 3 месяцев назад
Родитель
Сommit
edfb458cfd

+ 1 - 3
app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt

@@ -93,10 +93,8 @@ class PageView(
                     startPos = page.chapterPosition,
                     startPos = page.chapterPosition,
                     endPos = page.chapterPosition + page.charSize,
                     endPos = page.chapterPosition + page.charSize,
                 )
                 )
+        // 角标是固定的黄色书签丝带(见 ic_bookmark_badge),不随主题变色。
         binding.ivBookmarkBadge.isGone = !visible
         binding.ivBookmarkBadge.isGone = !visible
-        if (visible) {
-            binding.ivBookmarkBadge.setColorFilter(TipStyleProvider.style.textColor)
-        }
     }
     }
 
 
     val headerHeight: Int
     val headerHeight: Int

+ 14 - 0
app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt

@@ -22,6 +22,8 @@ import android.widget.FrameLayout
 import android.widget.TextView
 import android.widget.TextView
 import androidx.core.graphics.drawable.toDrawable
 import androidx.core.graphics.drawable.toDrawable
 import androidx.core.view.ViewCompat
 import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.updateLayoutParams
 import io.legado.app.BuildConfig
 import io.legado.app.BuildConfig
 import io.legado.app.R
 import io.legado.app.R
 import io.legado.app.constant.PageAnim
 import io.legado.app.constant.PageAnim
@@ -50,6 +52,7 @@ import io.legado.app.ui.config.readConfig.ReadConfig
 import io.legado.app.utils.activity
 import io.legado.app.utils.activity
 import io.legado.app.utils.dpToPx
 import io.legado.app.utils.dpToPx
 import io.legado.app.utils.invisible
 import io.legado.app.utils.invisible
+import io.legado.app.utils.statusBarHeight
 
 
 import io.legado.app.utils.throttle
 import io.legado.app.utils.throttle
 import java.text.BreakIterator
 import java.text.BreakIterator
@@ -425,10 +428,21 @@ class ReadView(
 
 
     private fun showBookmarkSwipeHint() {
     private fun showBookmarkSwipeHint() {
         if (bookmarkSwipeHint.visibility != View.VISIBLE) {
         if (bookmarkSwipeHint.visibility != View.VISIBLE) {
+            // 提示条是 ReadView 的直接子 View,edge-to-edge 下会被状态栏盖住;
+            // 每次显示前按当前系统栏顶部 inset 垫高,状态栏隐藏(inset 为 0)时自然回落顶部。
+            bookmarkSwipeHint.updateLayoutParams<FrameLayout.LayoutParams> {
+                topMargin = bookmarkSwipeHintTopInset() + BOOKMARK_SWIPE_HINT_TOP_MARGIN_DP.dpToPx()
+            }
             bookmarkSwipeHint.visibility = View.VISIBLE
             bookmarkSwipeHint.visibility = View.VISIBLE
         }
         }
     }
     }
 
 
+    private fun bookmarkSwipeHintTopInset(): Int =
+        ViewCompat.getRootWindowInsets(this)
+            ?.getInsets(WindowInsetsCompat.Type.systemBars())
+            ?.top
+            ?: context.statusBarHeight
+
     private fun hideBookmarkSwipeHint() {
     private fun hideBookmarkSwipeHint() {
         if (bookmarkSwipeHint.visibility != View.GONE) {
         if (bookmarkSwipeHint.visibility != View.GONE) {
             bookmarkSwipeHint.visibility = View.GONE
             bookmarkSwipeHint.visibility = View.GONE

+ 11 - 0
app/src/main/res/drawable/ic_bookmark_badge.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 阅读页右上角书签角标:黄色书签丝带(底部 V 形缺口),模拟真实纸质书签。 -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="12dp"
+    android:height="24dp"
+    android:viewportWidth="12"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#FFFFC107"
+        android:pathData="M2,2 L10,2 L10,22 L6,17 L2,22 Z" />
+</vector>

+ 4 - 4
app/src/main/res/layout/view_book_page.xml

@@ -75,12 +75,12 @@
 
 
     <ImageView
     <ImageView
         android:id="@+id/iv_bookmark_badge"
         android:id="@+id/iv_bookmark_badge"
-        android:layout_width="16dp"
-        android:layout_height="16dp"
+        android:layout_width="10dp"
+        android:layout_height="20dp"
         android:layout_marginTop="2dp"
         android:layout_marginTop="2dp"
-        android:layout_marginEnd="4dp"
+        android:layout_marginEnd="6dp"
         android:contentDescription="@string/a11y_page_bookmarked"
         android:contentDescription="@string/a11y_page_bookmarked"
-        android:src="@drawable/ic_bookmark"
+        android:src="@drawable/ic_bookmark_badge"
         android:visibility="gone"
         android:visibility="gone"
         app:layout_constraintEnd_toEndOf="@id/content_text_view"
         app:layout_constraintEnd_toEndOf="@id/content_text_view"
         app:layout_constraintTop_toTopOf="@id/content_text_view" />
         app:layout_constraintTop_toTopOf="@id/content_text_view" />