Android监听的软键盘的状态
2016-11-28 11:36
197 查看
有时候需要判断该软键盘是否弹出:
方法1:通过InputMethodManager类来判断,但是isActive()判断并不准确,有的时候你的键盘已经关闭了,但是依然返回ture。
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //得到InputMethodManager的实例 if (imm.isActive()) {//如果开启 imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS );//关闭/开启软键盘 }
方法2:
通过判断布局中的RelativeLayout的高度,Activity设置:
android:windowSoftInputMode="adjustResize"
然后键盘弹出的时候RelativeLayout会被挤压,从而高度发生变化,由此判断软键盘的状态。
为了方便使用,我们自定义一个RelativeLayout:
import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.widget.RelativeLayout; /** * 监听软键盘是否处于打开状态,使用方式RelativeLayout一样 */ public class KeyboardListenRelativeLayout extends RelativeLayout { private static final String TAG = KeyboardListenRelativeLayout.class.getSimpleName(); public static final byte KEYBOARD_STATE_SHOW = -3; public static final byte KEYBOARD_STATE_HIDE = -2; public static final byte KEYBOARD_STATE_INIT = -1; private boolean mHasInit = false; private boolean mHasKeyboard = false; private int mHeight; private IOnKeyboardStateChangedListener onKeyboardStateChangedListener; public KeyboardListenRelativeLayout(Context context) { super(context); } public KeyboardListenRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public KeyboardListenRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setOnKeyboardStateChangedListener(IOnKeyboardStateChangedListener onKeyboardStateChangedListener) { this.onKeyboardStateChangedListener = onKeyboardStateChangedListener; } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); Log.e(TAG, "b= " + b); if (!mHasInit) { mHasInit = true; mHeight = b; Log.e(TAG, "mHeight= " + b); if (onKeyboardStateChangedListener != null) { onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_INIT); } } else { mHeight = mHeight < b ? b : mHeight; } if (mHasInit && mHeight > b) { //mHeight代表键盘的真实高度 ,b代表在窗口中的高度 mHeight>b 说明键盘隐藏 mHasKeyboard = true; if (onKeyboardStateChangedListener != null) { onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_SHOW); } } if (mHasInit && mHasKeyboard && mHeight == b) { // mHeight = b 说明已经弹出 mHasKeyboard = false; if (onKeyboardStateChangedListener != null) { onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_HIDE); } } } public interface IOnKeyboardStateChangedListener { void onKeyboardStateChanged(int state); } }
最后给mRelativeLayout设置一个监听:
mRelativeLayout.setOnKeyboardStateChangedListener(new KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener() { public void onKeyboardStateChanged(int state) { switch (state) { case KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://软键盘隐藏 LogUtil.e("Keyboard", "软键盘隐藏"); break; case KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://软键盘显示 LogUtil.e("Keyboard", "软键盘显示"); break; default: break; } } });
参考不详…
相关文章推荐
- android 自定义View在弹出的软键盘之上,以及测量软键盘高度和监听软键盘状态
- Android软键盘(七)键盘显示的状态下,onKeyDown方法无法监听到back事件
- Android软键盘(七)键盘显示的状态下,onKeyDown方法无法监听到back事件
- android 监听判断软键盘的弹出、隐藏状态
- android 监听软键盘弹起和关闭状态与点击空白区域软键盘隐藏
- Android - 监听软键盘状态以及获取软键盘的高度
- android 自定义View在弹出的软键盘之上,以及测量软键盘高度和监听软键盘状态
- Android 控制软键盘显示、隐藏,并且添加软键盘的状态监听的终极解决办法
- Android电池状态监听实例1(上)
- android 2.1 监听电话状态并自动接听来电
- android 软键盘 返回键 消失事件 监听
- 在android上监听网络状态的变更
- Android电池状态的监听
- android usb大容量存储时sd卡状态监听
- 在android上监听网络状态的变更(转)
- network: android 使用广播监听网络状态
- network: android 使用广播监听网络状态
- 【总结备用】Android监听网络状态实现(BroadcastReceiver + Service)
- Android电池状态监听实例1(下)
- Android发送短信以及监听发送状态