输入框 手动调整底部margin
This commit is contained in:
parent
456fa95f25
commit
7c0f57745e
|
|
@ -74,7 +74,7 @@
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.chat.ChatActivity"
|
android:name=".ui.chat.ChatActivity"
|
||||||
android:windowSoftInputMode="adjustResize"
|
android:windowSoftInputMode="adjustResize|stateHidden"
|
||||||
android:exported="false" >
|
android:exported="false" >
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ import android.view.View.GONE
|
||||||
import android.view.View.VISIBLE
|
import android.view.View.VISIBLE
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.core.view.GravityCompat
|
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.Observer
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.alibaba.android.arouter.facade.annotation.Route
|
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.countDownCoroutines
|
||||||
import com.remax.visualnovel.extension.launchAndLoadingCollect
|
import com.remax.visualnovel.extension.launchAndLoadingCollect
|
||||||
import com.remax.visualnovel.extension.launchWithRequest
|
import com.remax.visualnovel.extension.launchWithRequest
|
||||||
|
import com.remax.visualnovel.extension.setMargin
|
||||||
import com.remax.visualnovel.extension.toast
|
import com.remax.visualnovel.extension.toast
|
||||||
import com.remax.visualnovel.manager.nim.NimManager
|
import com.remax.visualnovel.manager.nim.NimManager
|
||||||
import com.remax.visualnovel.ui.chat.call.ChatCallView
|
import com.remax.visualnovel.ui.chat.call.ChatCallView
|
||||||
import com.remax.visualnovel.ui.chat.setting.model.ChatModelDialog
|
import com.remax.visualnovel.ui.chat.setting.model.ChatModelDialog
|
||||||
import com.remax.visualnovel.ui.chat.ui.HoldToTalkDialog
|
import com.remax.visualnovel.ui.chat.ui.HoldToTalkDialog
|
||||||
import com.remax.visualnovel.utils.RecordHelper
|
import com.remax.visualnovel.utils.RecordHelper
|
||||||
import com.remax.visualnovel.utils.StatusBarUtil2
|
|
||||||
import com.remax.visualnovel.utils.StatusBarUtil3
|
import com.remax.visualnovel.utils.StatusBarUtil3
|
||||||
|
import com.remax.visualnovel.utils.setOnKeyboardHeightChangeListener
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
@ -44,6 +48,7 @@ class ChatActivity : BaseBindingActivity<ActivityActorChatBinding>() {
|
||||||
private var mMode = MODE_TEXT
|
private var mMode = MODE_TEXT
|
||||||
private val chatViewModel by viewModels<ChatViewModel>()
|
private val chatViewModel by viewModels<ChatViewModel>()
|
||||||
private val mRecordAssist = RecordAssist()
|
private val mRecordAssist = RecordAssist()
|
||||||
|
private val mImeHelper = ImeHelper()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -62,6 +67,8 @@ class ChatActivity : BaseBindingActivity<ActivityActorChatBinding>() {
|
||||||
initInputPanelEvents()
|
initInputPanelEvents()
|
||||||
initCallViewEvents()
|
initCallViewEvents()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mImeHelper.startImeListen()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun initData() {
|
override fun initData() {
|
||||||
|
|
@ -232,6 +239,14 @@ class ChatActivity : BaseBindingActivity<ActivityActorChatBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val MODE_TEXT = 1
|
const val MODE_TEXT = 1
|
||||||
|
|
@ -335,4 +350,20 @@ class ChatActivity : BaseBindingActivity<ActivityActorChatBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -13,6 +13,10 @@ class ChatEditView @JvmOverloads constructor(context: Context, attrs: AttributeS
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
isFocusable = true
|
||||||
|
isFocusableInTouchMode = true
|
||||||
|
isClickable = true
|
||||||
|
|
||||||
setBackgroundResource(R.color.transparent)
|
setBackgroundResource(R.color.transparent)
|
||||||
setPadding(0, 12.dp, 0, 12.dp)
|
setPadding(0, 12.dp, 0, 12.dp)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
<!-- 页面内容 -->
|
<!-- 页面内容 -->
|
||||||
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
|
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
|
||||||
android:id="@+id/content"
|
android:id="@+id/content_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@mipmap/splash_bg" >
|
android:background="@mipmap/splash_bg" >
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
|
<com.remax.visualnovel.widget.uitoken.view.UITokenConstraintLayout
|
||||||
|
android:id="@+id/content_sub_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
app:radiusToken="@string/radius_40"
|
app:radiusToken="@string/radius_40"
|
||||||
app:backgroundColorToken="@string/color_surface_element_normal"
|
app:backgroundColorToken="@string/color_surface_element_normal"
|
||||||
>
|
>
|
||||||
<RelativeLayout
|
<FrameLayout
|
||||||
android:id="@+id/iv_hold2talk"
|
android:id="@+id/iv_hold2talk"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|
@ -40,14 +40,14 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/hold_to_talk"
|
android:text="@string/hold_to_talk"
|
||||||
app:drawableLeftCompat="@mipmap/chat_voice_s"
|
app:drawableLeftCompat="@mipmap/chat_voice_s"
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/sp_15"
|
android:textSize="@dimen/sp_15"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:drawablePadding="@dimen/dp_5"
|
android:drawablePadding="@dimen/dp_5"
|
||||||
/>
|
/>
|
||||||
</RelativeLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
|
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
|
||||||
android:id="@+id/iv_chat_mode_switcher"
|
android:id="@+id/iv_chat_mode_switcher"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue