diff --git a/VisualNovel/app/src/main/AndroidManifest.xml b/VisualNovel/app/src/main/AndroidManifest.xml
index 225c85e..d694bf8 100644
--- a/VisualNovel/app/src/main/AndroidManifest.xml
+++ b/VisualNovel/app/src/main/AndroidManifest.xml
@@ -74,7 +74,7 @@
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt
index 16db632..87978db 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatActivity.kt
@@ -6,6 +6,9 @@ import android.view.View.GONE
import android.view.View.VISIBLE
import androidx.activity.viewModels
import androidx.core.view.GravityCompat
+import androidx.core.view.marginLeft
+import androidx.core.view.marginRight
+import androidx.core.view.marginTop
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import com.alibaba.android.arouter.facade.annotation.Route
@@ -24,14 +27,15 @@ import com.remax.visualnovel.event.model.OnLoginEvent
import com.remax.visualnovel.extension.countDownCoroutines
import com.remax.visualnovel.extension.launchAndLoadingCollect
import com.remax.visualnovel.extension.launchWithRequest
+import com.remax.visualnovel.extension.setMargin
import com.remax.visualnovel.extension.toast
import com.remax.visualnovel.manager.nim.NimManager
import com.remax.visualnovel.ui.chat.call.ChatCallView
import com.remax.visualnovel.ui.chat.setting.model.ChatModelDialog
import com.remax.visualnovel.ui.chat.ui.HoldToTalkDialog
import com.remax.visualnovel.utils.RecordHelper
-import com.remax.visualnovel.utils.StatusBarUtil2
import com.remax.visualnovel.utils.StatusBarUtil3
+import com.remax.visualnovel.utils.setOnKeyboardHeightChangeListener
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import timber.log.Timber
@@ -44,6 +48,7 @@ class ChatActivity : BaseBindingActivity() {
private var mMode = MODE_TEXT
private val chatViewModel by viewModels()
private val mRecordAssist = RecordAssist()
+ private val mImeHelper = ImeHelper()
@@ -62,6 +67,8 @@ class ChatActivity : BaseBindingActivity() {
initInputPanelEvents()
initCallViewEvents()
}
+
+ mImeHelper.startImeListen()
}
override fun initData() {
@@ -232,6 +239,14 @@ class ChatActivity : BaseBindingActivity() {
}
}
+ override fun onResume() {
+ super.onResume()
+ }
+
+ override fun onStop() {
+ super.onStop()
+ }
+
companion object {
const val MODE_TEXT = 1
@@ -335,4 +350,20 @@ class ChatActivity : BaseBindingActivity() {
}
+ inner class ImeHelper {
+ fun startImeListen() {
+ val rootView = binding.root
+ rootView.setOnKeyboardHeightChangeListener { keyboardHeight, isVisible ->
+ updateLayoutForKeyboard(keyboardHeight, isVisible)
+ }
+ }
+
+ private fun updateLayoutForKeyboard(keyboardHeight: Int, isVisible: Boolean) {
+ with (binding.contentSubContainer) {
+ setMargin(marginLeft, marginTop, marginRight, keyboardHeight)
+ }
+ }
+ }
+
+
}
\ No newline at end of file
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatEditView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatEditView.kt
index dcf0860..a5d89de 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatEditView.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/ChatEditView.kt
@@ -13,6 +13,10 @@ class ChatEditView @JvmOverloads constructor(context: Context, attrs: AttributeS
init {
+ isFocusable = true
+ isFocusableInTouchMode = true
+ isClickable = true
+
setBackgroundResource(R.color.transparent)
setPadding(0, 12.dp, 0, 12.dp)
}
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/utils/ImeUtil.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/utils/ImeUtil.kt
new file mode 100644
index 0000000..d7647c4
--- /dev/null
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/utils/ImeUtil.kt
@@ -0,0 +1,51 @@
+package com.remax.visualnovel.utils
+
+
+import android.view.View
+import androidx.core.view.*
+import com.remax.visualnovel.utils.ResUtil.dp
+
+fun View.setOnKeyboardVisibilityChangeListener(
+ onShown: (keyboardHeight: Int) -> Unit,
+ onHidden: () -> Unit
+) {
+ val threshold = 100.dp
+
+ ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
+ val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime())
+ val keyboardHeight = imeInsets.bottom
+
+ val isKeyboardVisible = keyboardHeight > threshold
+
+ if (isKeyboardVisible) {
+ onShown(keyboardHeight)
+ } else {
+ onHidden()
+ }
+
+ insets
+ }
+}
+
+fun View.setOnKeyboardHeightChangeListener(
+ onHeightChanged: (keyboardHeight: Int, isVisible: Boolean) -> Unit
+) {
+ var lastKeyboardHeight = 0
+ var lastVisibility = false
+
+ ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
+ val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime())
+ val keyboardHeight = imeInsets.bottom
+ val isVisible = keyboardHeight > 100.dp
+
+ if (keyboardHeight != lastKeyboardHeight || isVisible != lastVisibility) {
+ onHeightChanged(keyboardHeight, isVisible)
+ lastKeyboardHeight = keyboardHeight
+ lastVisibility = isVisible
+ }
+
+ //WindowInsetsCompat.CONSUMED.toWindowInsets() ?: insets
+ insets
+ }
+}
+
diff --git a/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml b/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml
index f3777f8..d8e2001 100644
--- a/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml
+++ b/VisualNovel/app/src/main/res/layout/activity_actor_chat.xml
@@ -10,7 +10,7 @@
@@ -25,6 +25,7 @@
/>
-
-
+