From 7c0f57745e21b543787503dfd298682353794e53 Mon Sep 17 00:00:00 2001
From: renhaoting <370797079@qq.com>
Date: Fri, 31 Oct 2025 18:23:15 +0800
Subject: [PATCH] =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=20=E6=89=8B?=
=?UTF-8?q?=E5=8A=A8=E8=B0=83=E6=95=B4=E5=BA=95=E9=83=A8margin?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
VisualNovel/app/src/main/AndroidManifest.xml | 2 +-
.../remax/visualnovel/ui/chat/ChatActivity.kt | 33 +++++++++++-
.../remax/visualnovel/ui/chat/ChatEditView.kt | 4 ++
.../com/remax/visualnovel/utils/ImeUtil.kt | 51 +++++++++++++++++++
.../main/res/layout/activity_actor_chat.xml | 3 +-
.../src/main/res/layout/chat_inputpanel.xml | 6 +--
6 files changed, 93 insertions(+), 6 deletions(-)
create mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/utils/ImeUtil.kt
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 @@
/>
-
-
+