自动隐藏键盘

This commit is contained in:
kunfei
2023-03-16 22:55:47 +08:00
parent 5ca00ec7be
commit 305a23fc88
4 changed files with 20 additions and 61 deletions

View File

@@ -110,6 +110,13 @@ class BookSourceActivity : VMBaseActivity<ActivityBookSourceBinding, BookSourceV
}
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
if (ev.action == MotionEvent.ACTION_DOWN) {
binding.root.hideSoftInput()
}
return super.dispatchTouchEvent(ev)
}
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.book_source, menu)
return super.onCompatCreateOptionsMenu(menu)

View File

@@ -6,6 +6,7 @@ import android.os.Bundle
import android.text.format.DateUtils
import android.view.KeyEvent
import android.view.MenuItem
import android.view.MotionEvent
import android.view.ViewGroup
import androidx.activity.viewModels
import androidx.core.view.postDelayed
@@ -38,10 +39,7 @@ import io.legado.app.ui.main.explore.ExploreFragment
import io.legado.app.ui.main.my.MyFragment
import io.legado.app.ui.main.rss.RssFragment
import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.utils.observeEvent
import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.*
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
@@ -85,6 +83,13 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
}
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
if (ev.action == MotionEvent.ACTION_DOWN) {
binding.root.hideSoftInput()
}
return super.dispatchTouchEvent(ev)
}
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
launch {

View File

@@ -23,7 +23,10 @@ import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.book.explore.ExploreShowActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.utils.*
import io.legado.app.utils.applyTint
import io.legado.app.utils.cnCompare
import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.startActivity
import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
@@ -48,7 +51,6 @@ class ExploreFragment : VMBaseFragment<ExploreViewModel>(R.layout.fragment_explo
private val groups = linkedSetOf<String>()
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)
@@ -56,14 +58,6 @@ class ExploreFragment : VMBaseFragment<ExploreViewModel>(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) {

View File

@@ -1,47 +0,0 @@
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)
}
}
}
}