Przeglądaj źródła

feat: IM输入框

DoggyZhang 4 miesięcy temu
rodzic
commit
beb68b8df9

+ 23 - 0
module/im/src/main/java/com/adealink/weparty/im/session/SessionFragment.kt

@@ -1,10 +1,15 @@
 package com.adealink.weparty.im.session
 
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.doOnPreDraw
+import androidx.core.view.updatePadding
 import com.adealink.frame.base.fastLazy
 import com.adealink.frame.log.Log
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.weparty.commonui.BaseFragment
 import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.ext.fitSystemWindows
+import com.adealink.weparty.commonui.ext.onWindowInsets
 import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
 import com.adealink.weparty.im.R
 import com.adealink.weparty.im.databinding.FragmentSessionBinding
@@ -64,7 +69,25 @@ class SessionFragment : BaseFragment(R.layout.fragment_session) {
         sessionPresenter?.setMessageListAdapter(sessionAdapter)
         sessionPresenter?.setMessageRecycleView(binding.rvMessage)
 
+        fitWindow()
+    }
 
+    private fun fitWindow() {
+        // 关键:只在需要的时候设置
+        activity?.window?.fitSystemWindows(false)
+        // 内容布局处理键盘
+        binding.root.onWindowInsets { view, insets ->
+            val ime = insets.getInsets(WindowInsetsCompat.Type.ime())
+            val nav = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
+
+            // 键盘显示时使用键盘高度,否则使用导航栏高度
+            val bottomInset = if (ime.bottom > 0) ime.bottom else nav.bottom
+            view.updatePadding(bottom = bottomInset)
+//            binding.svContent.doOnPreDraw {
+//                binding.svContent.smoothScrollTo(0, bottomInset)
+//            }
+            insets
+        }
     }
 
     override fun loadData() {