功能一开始理顺起来感觉很复杂,要判断多种情况。所以首先先理清思路,然后再写(找)代码。
当点击加号时有两种情况: 1.输入框下方菜单开启时: 1.软键盘关闭,但输入框位置不变,露出下方菜单。 2.软键盘开启,但输入框位置不变,下方菜单被软键盘完全遮盖 2.输入框下方菜关闭时: 1.软键盘不动,输入框位置提到软键盘高度,露出下方菜单
经过分析首先需要实时获取的属性是软键盘的开闭状态,软键盘高度
软键盘的开闭状态获取还有开闭方法在网上很好找,这里粘贴了一份。软键盘的高度经过查找也有很多方式,实际试了两种
1.通过自定义布局重写onSizeChange()方法+adjust_resize属性(也是我实际用的方式)
2.通过globleLayoutListener监听Activity的根部局尺寸
思路理清,必要的条件也有了接下来就是代码实现。这里做了一些优化,把软键盘尺寸存到了SharedPreference里面
首先是界面的根部局:
package com.suikajy.jiimdemo2.widget
import android.content.Context
import android.util.AttributeSet
import android.widget.LinearLayout
import com.suikajy.jiimdemo2.utils.LogUtils
/**
* 作为聊天室界面的最底层布局,仅仅是监听界面尺寸的改变
*
* @author zjy
* @date 2017/11/7
*/
class ReSizeLayout : LinearLayout {
private var mSizeChangeListener: OnSizeChangeListener? = null
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
LogUtils.e("onSizeChanged : new: $w $h old: $oldw,$oldh")
if (mSizeChangeListener != null) {
mSizeChangeListener!!.onSizeChanged(w, h, oldw, oldh)
}
}
fun setOnSizeChangeListener(listener: OnSizeChangeListener) {
mSizeChangeListener = listener
}
interface OnSizeChangeListener {
fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int)
}
}
package com.suikajy.jiimdemo2.utils
import android.app.Activity
import android.content.Context
import android.graphics.Rect
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
/**
* @author zjy
* @date 2017/11/27
*/
/**
* 获取根部局高度
*