From 5ca00ec7bef30eb2bff85a3f653660bdb2c869b8 Mon Sep 17 00:00:00 2001 From: kunfei Date: Thu, 16 Mar 2023 21:37:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../app/ui/main/explore/ExploreFragment.kt | 14 ++++-- .../app/utils/SoftKeyBoardChangeListener.kt | 47 +++++++++++++++++++ .../io/legado/app/utils/ViewExtensions.kt | 4 ++ 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/SoftKeyBoardChangeListener.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1436fb3b0..6df77b226 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -167,7 +167,7 @@ android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize|stateHidden" /> - + (R.layout.fragment_explo private val groups = linkedSetOf() private var exploreFlowJob: Job? = null private var groupsMenu: SubMenu? = null + private val softKeyBoardChangeListener = SoftKeyBoardChangeListener() override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { setSupportToolbar(binding.titleBar.toolbar) @@ -58,6 +56,14 @@ class ExploreFragment : VMBaseFragment(R.layout.fragment_explo initRecyclerView() initGroupData() upExploreData() + softKeyBoardChangeListener.attach(requireActivity().window) { + binding.root.setPaddingBottom(softKeyBoardChangeListener.keyBoardHeight) + } + } + + override fun onDestroy() { + super.onDestroy() + softKeyBoardChangeListener.unAttach() } override fun onCompatCreateOptionsMenu(menu: Menu) { diff --git a/app/src/main/java/io/legado/app/utils/SoftKeyBoardChangeListener.kt b/app/src/main/java/io/legado/app/utils/SoftKeyBoardChangeListener.kt new file mode 100644 index 000000000..1e76e6a1a --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/SoftKeyBoardChangeListener.kt @@ -0,0 +1,47 @@ +package io.legado.app.utils + +import android.graphics.Rect +import android.view.ViewTreeObserver +import android.view.Window +import splitties.systemservices.windowManager +import kotlin.math.abs + +class SoftKeyBoardChangeListener : ViewTreeObserver.OnGlobalLayoutListener { + + private var window: Window? = null + private var softKeyBoardChangeCallback: ((Boolean) -> Unit)? = null + var keyBoardShowing = false + private set + var keyBoardHeight = 0 + + fun attach(window: Window, callback: ((Boolean) -> Unit)) { + this.window = window + window.decorView.viewTreeObserver.addOnGlobalLayoutListener(this) + softKeyBoardChangeCallback = callback + } + + fun unAttach() { + window?.decorView?.viewTreeObserver?.removeOnGlobalLayoutListener(this) + window = null + } + + override fun onGlobalLayout() { + window?.let { + val rect = Rect() + // 获取当前页面窗口的显示范围 + it.decorView.getWindowVisibleDisplayFrame(rect) + val screenHeight = windowManager.windowSize.heightPixels + val keyboardHeight = screenHeight - rect.bottom // 输入法的高度 + if (abs(keyboardHeight) > screenHeight / 5) { + keyBoardShowing = true // 超过屏幕五分之一则表示弹出了输入法 + this.keyBoardHeight = abs(keyboardHeight) + softKeyBoardChangeCallback?.invoke(true) + } else { + keyBoardShowing = false + this.keyBoardHeight = 0 + softKeyBoardChangeCallback?.invoke(false) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt index d38107d9c..64f157169 100644 --- a/app/src/main/java/io/legado/app/utils/ViewExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ViewExtensions.kt @@ -140,6 +140,10 @@ fun View.screenshot(): Bitmap? { } } +fun View.setPaddingBottom(bottom: Int) { + setPadding(paddingLeft, paddingTop, paddingRight, bottom) +} + fun SeekBar.progressAdd(int: Int) { progress += int }