关于Android弹出软键盘“顶起”View的问题

问题简单一带而过,后面直接说解决思路,Android系统已经给我们提供了防止键盘遮挡输入内容的解决方案,比如在清单文件对应的Activity添加:

android:windowSoftInputMode="adjustPan|stateHidden"

这种方式很简单,在一些需要编辑的页面,可以将EditText顶起,解决了键盘可能遮挡的问题。

但是它还存在一个问题,就是他只能“顶起”输入部分,比如一个聊天页面,输入框在下方,我们希望的是,当键盘弹出的时候,将底部整个输入部分的View全部顶起,而不单单是不遮挡输入内容这么简单。

下面来简单说一下解决方案,“顶起”之所以加引号,是因为键盘并不是真正的将控件顶起来了,键盘是在视图的最上层,我们可以自定义一个需要适配键盘弹出和隐藏的View,来改变View的高度,达到所谓的弹出软键盘“顶起”View的效果。如图:

以下示例为Kotlin,只做了最简单的适配示例,如果需要实现个性化需求,可自行修改。

自定义一个控件InputPanelView,监听键盘弹出高度。

package ……import android.content.Contextimport android.graphics.Rectimport android.util.AttributeSetimport android.view.LayoutInflaterimport android.view.Viewimport android.widget.RelativeLayoutimport kotlinx.android.synthetic.main.view_input_panel.view.*class InputPanelView(context: Context?, attrs: AttributeSet?) : RelativeLayout(context, attrs) {    companion object {        private const val TAG = "InputPanelView"    }    init {        LayoutInflater.from(context).inflate(R.layout.view_input_panel, this, true)        viewTreeObserver.addOnGlobalLayoutListener {            val rect = Rect()            getWindowVisibleDisplayFrame(rect)            val screenHeight = rootView.height            val keyboardHeight = screenHeight - rect.bottom            Log.d(TAG, "键盘高度:$keyboardHeight  measuredHeight = $measuredHeight")            resetHeight(keyboardHeight)        }    }    private fun resetHeight(keyboardHeight: Int) {        when {            0 == keyboardHeight && rl_extra_view?.visibility == View.VISIBLE -> {                rl_extra_view?.visibility = View.GONE            }            0 < keyboardHeight && rl_extra_view?.visibility == View.GONE -> {                val layoutParams = rl_extra_view?.layoutParams                layoutParams?.height = keyboardHeight                rl_extra_view?.layoutParams = layoutParams                rl_extra_view?.visibility = View.VISIBLE            }        }    }}

自定义View view_input_panel.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <LinearLayout        android:id="@+id/ll"        android:layout_width="match_parent"        android:layout_height="@dimen/y114"        android:background="@android:color/white"        android:minHeight="@dimen/y114"        android:orientation="horizontal">        <EditText            android:layout_width="0dp"            android:layout_height="match_parent"            android:layout_weight="1"            android:background="@android:color/transparent"            android:hint="请输入消息..."            android:inputType="text"            android:paddingStart="@dimen/x30"            android:paddingEnd="@dimen/x30"            android:textColor="#222222"            android:textColorHint="#BDBDBD"            android:textSize="@dimen/s30" />        <ImageButton            android:id="@+id/ib_red_packets"            android:layout_width="@dimen/x114"            android:layout_height="match_parent"            android:background="@android:color/transparent"            android:contentDescription="@string/app_name"            android:src="@mipmap/icon_chat_room_red_packets" />        <ImageButton            android:id="@+id/ib_send"            android:layout_width="@dimen/x114"            android:layout_height="match_parent"            android:background="@android:color/transparent"            android:contentDescription="@string/app_name"            android:src="@mipmap/icon_chat_room_send" />    LinearLayout>    <RelativeLayout        android:id="@+id/rl_extra_view"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@id/ll"        android:visibility="gone">    RelativeLayout>RelativeLayout>

更多相关文章

  1. Android(安卓)如何让EditText不自动获取焦点
  2. Android(安卓)EditText inputType属性
  3. 浅谈Android五大布局(一)――LinearLayout、FrameLayout和Absoulte
  4. android软键盘的显示后隐藏
  5. Android(安卓)软键盘小知识点
  6. Android监听键盘显示和隐藏
  7. android webview在弹出软键盘时,布局没有上移的解决办法
  8. Android监听键盘上的确定键等
  9. Android(安卓)跳转界面 自动弹出输入框

随机推荐

  1. android中的color使用总结
  2. Android中应用界面布局总结
  3. Android自定义radiobutton(文字靠左,选框
  4. Android中TextView中加图片,超链接,部分字
  5. Android样式开发
  6. Android 背景渐变 渐变背景 shape
  7. Android(安卓)编译环境小语种丢失Bug
  8. Android 控件xml属性详解
  9. 安卓课程九 布局属性说明
  10. cocos2d-x & Android 环境配置笔记