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 @@ /> - - +