This commit is contained in:
Horis
2024-08-29 09:41:27 +08:00
parent 5a024d2d02
commit 35bc6de5ad
4 changed files with 42 additions and 15 deletions
@@ -279,10 +279,13 @@ abstract class BaseReadBookActivity :
* 适配刘海 * 适配刘海
*/ */
private fun upLayoutInDisplayCutoutMode() { private fun upLayoutInDisplayCutoutMode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && ReadBookConfig.readBodyToLh) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
window.attributes = window.attributes.apply { window.attributes = window.attributes.apply {
layoutInDisplayCutoutMode = layoutInDisplayCutoutMode = if (ReadBookConfig.readBodyToLh) {
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
} else {
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
}
} }
} }
} }
@@ -112,7 +112,7 @@ class MoreConfigDialog : DialogFragment() {
PreferKey.readBodyToLh -> activity?.recreate() PreferKey.readBodyToLh -> activity?.recreate()
PreferKey.hideStatusBar -> { PreferKey.hideStatusBar -> {
ReadBookConfig.hideStatusBar = getPrefBoolean(PreferKey.hideStatusBar) ReadBookConfig.hideStatusBar = getPrefBoolean(PreferKey.hideStatusBar)
postEvent(EventBus.UP_CONFIG, arrayListOf(0)) postEvent(EventBus.UP_CONFIG, arrayListOf(0, 2))
} }
PreferKey.hideNavigationBar -> { PreferKey.hideNavigationBar -> {
@@ -5,6 +5,8 @@ import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.FrameLayout import android.widget.FrameLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.isInvisible import androidx.core.view.isInvisible
import io.legado.app.R import io.legado.app.R
@@ -24,8 +26,8 @@ import io.legado.app.utils.activity
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.gone import io.legado.app.utils.gone
import io.legado.app.utils.setTextIfNotEqual import io.legado.app.utils.setTextIfNotEqual
import io.legado.app.utils.statusBarHeight
import splitties.views.backgroundColor import splitties.views.backgroundColor
import splitties.views.topPadding
import java.util.Date import java.util.Date
/** /**
@@ -52,7 +54,7 @@ class PageView(context: Context) : FrameLayout(context) {
val headerHeight: Int val headerHeight: Int
get() { get() {
val h1 = if (ReadBookConfig.hideStatusBar) 0 else context.statusBarHeight val h1 = if (binding.vwStatusBar.isGone) 0 else binding.vwStatusBar.height
val h2 = if (binding.llHeader.isGone) 0 else binding.llHeader.height val h2 = if (binding.llHeader.isGone) 0 else binding.llHeader.height
return h1 + h2 return h1 + h2
} }
@@ -60,6 +62,11 @@ class PageView(context: Context) : FrameLayout(context) {
init { init {
if (!isInEditMode) { if (!isInEditMode) {
upStyle() upStyle()
ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars())
binding.vwStatusBar.topPadding = insets.top
windowInsets
}
} }
} }
@@ -114,7 +121,7 @@ class PageView(context: Context) : FrameLayout(context) {
* 显示状态栏时隐藏header * 显示状态栏时隐藏header
*/ */
fun upStatusBar() = with(binding.vwStatusBar) { fun upStatusBar() = with(binding.vwStatusBar) {
setPadding(paddingLeft, context.statusBarHeight, paddingRight, paddingBottom) // setPadding(paddingLeft, context.statusBarHeight, paddingRight, paddingBottom)
isGone = ReadBookConfig.hideStatusBar || readBookActivity?.isInMultiWindow == true isGone = ReadBookConfig.hideStatusBar || readBookActivity?.isInMultiWindow == true
} }
@@ -14,14 +14,16 @@ import androidx.annotation.ColorInt
import androidx.annotation.StyleRes import androidx.annotation.StyleRes
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.graphics.alpha import androidx.core.graphics.alpha
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.children import androidx.core.view.children
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import io.legado.app.R import io.legado.app.R
import io.legado.app.lib.theme.elevation import io.legado.app.lib.theme.elevation
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.utils.activity import io.legado.app.utils.activity
import io.legado.app.utils.navigationBarHeight import splitties.views.bottomPadding
import io.legado.app.utils.statusBarHeight import splitties.views.topPadding
@Suppress("unused", "MemberVisibilityCanBePrivate") @Suppress("unused", "MemberVisibilityCanBePrivate")
class TitleBar @JvmOverloads constructor( class TitleBar @JvmOverloads constructor(
@@ -153,12 +155,25 @@ class TitleBar @JvmOverloads constructor(
} }
if (!isInEditMode) { if (!isInEditMode) {
if (fitStatusBar) { // if (fitStatusBar) {
setPadding(paddingLeft, context.statusBarHeight, paddingRight, paddingBottom) // setPadding(paddingLeft, context.statusBarHeight, paddingRight, paddingBottom)
} // }
//
// if (fitNavigationBar) {
// setPadding(paddingLeft, paddingTop, paddingRight, context.navigationBarHeight)
// }
if (fitNavigationBar) { if (fitStatusBar || fitNavigationBar) {
setPadding(paddingLeft, paddingTop, paddingRight, context.navigationBarHeight) ViewCompat.setOnApplyWindowInsetsListener(this) { _, windowInsets ->
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
if (fitStatusBar) {
topPadding = insets.top
}
if (fitNavigationBar) {
bottomPadding = insets.bottom
}
windowInsets
}
} }
setBackgroundColor(context.primaryColor) setBackgroundColor(context.primaryColor)
@@ -236,8 +251,10 @@ class TitleBar @JvmOverloads constructor(
} }
fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, fullScreen: Boolean) { fun onMultiWindowModeChanged(isInMultiWindowMode: Boolean, fullScreen: Boolean) {
val topPadding = if (!isInMultiWindowMode && fullScreen) context.statusBarHeight else 0 // if (fitStatusBar) {
setPadding(paddingLeft, topPadding, paddingRight, paddingBottom) // val topPadding = if (!isInMultiWindowMode && fullScreen) context.statusBarHeight else 0
// setPadding(paddingLeft, topPadding, paddingRight, paddingBottom)
// }
} }
private fun attachToActivity() { private fun attachToActivity() {