Kotlin应用中Emoji键盘重叠内容及功能异常求助
Emoji键盘重叠内容及切换按钮遮挡问题解决
问题现象
- 开启Emoji键盘时出现内容被重叠的情况,常规键盘无此问题
- 打开Emoji键盘时,屏幕仅轻微变暗,用于切换键盘的按钮被Emoji键盘遮挡,无法操作
相关截图
实现代码
使用vanniktech Emoji库,Activity中的核心代码:
val emojiPopup = EmojiPopup( rootView = binding.root, editText = binding.editTextChat, onEmojiBackspaceClickListener = { Log.d(TAG, "Clicked on Backspace") }, onEmojiClickListener = { emoji -> Log.d(TAG, "Clicked on Emoji " + emoji.unicode) }, onEmojiPopupShownListener = { binding.chooseEmodjiButton.setImageResource(R.drawable.ic_keyboard) }, onSoftKeyboardOpenListener = { px -> Log.d( TAG, "Opened soft keyboard with height $px" ) }, onEmojiPopupDismissListener = { binding.chooseEmodjiButton.setImageResource(R.drawable.baseline_insert_emoticon_24) }, onSoftKeyboardCloseListener = { Log.d(TAG, "Closed soft keyboard") }, pageTransformer = PageTransformer(), searchEmoji = NoSearchEmoji, ) binding.chooseEmodjiButton.setOnClickListener { emojiPopup.toggle() }
解决方案
1. 修复内容重叠问题
- 配置窗口软键盘模式:在
AndroidManifest.xml中对应Activity标签添加adjustResize属性,让系统自动调整布局大小适配键盘:android:windowSoftInputMode="adjustResize" - 使用可滚动根布局:将页面根布局替换为
ScrollView或NestedScrollView,确保键盘弹出时布局可滚动,避免内容被遮挡。 - 确认根视图参数:检查
EmojiPopup初始化时传入的rootView是否为Activity的真实根布局(比如binding.root是否包含整个页面布局)。
2. 修复切换键盘按钮被遮挡问题
- 调整按钮位置:将切换键盘按钮移至页面非底部区域,或为按钮设置足够大的
layout_marginBottom,确保Emoji键盘弹出时按钮仍在可视区域。 - 监听弹窗显示事件:在
onEmojiPopupShownListener中手动调整布局,比如将包含切换按钮的容器向上偏移,避开Emoji键盘区域:onEmojiPopupShownListener = { binding.chooseEmodjiButton.setImageResource(R.drawable.ic_keyboard) // 示例:将按钮容器向上偏移键盘高度(需提前获取键盘高度) binding.keyboardSwitchContainer.translationY = -keyboardHeight.toFloat() } - 关闭全屏弹窗模式:检查是否开启了EmojiPopup的全屏相关配置,若有则关闭,避免弹窗覆盖整个屏幕底部区域。
内容的提问来源于stack exchange,提问作者Loppllo Fg
相关产品推荐
相关产品推荐

