<Android>监听软键盘打开收起事件(软键盘自带收起按钮)
来源:互联网 发布:淘宝联盟买家 编辑:程序博客网 时间:2024/05/21 11:31
最近在公司开发cocos2dx上的android输入框控件,遇到软键盘的事件监听,通常软键盘的收起方式大致3种:
1.点击软键盘右下角的Return按钮(系统收起)
2.输入框焦点时按返回按钮(系统收起)
3.点击软键盘和输入框的外部(自发收起)
4.点击软键盘自带的收起按钮(软键盘收起)
前三种事件可以监听,方式都比较简单
1.点击软键盘右下角的Return按钮
给输入框设置监听
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
// 可捕捉右下角的Return按钮
//添加抛出收起事件代码
return false;
}
});
2.输入框焦点时按返回按钮
给输入框增加按钮监听
editText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (listener != null) {
// 可添加抛出收起事件代码
}
return true;
}
return false;
}
});
3.点击软键盘和输入框的外部
给输入框的父容器增加触摸监听
@Override
public boolean onTouchEvent(MotionEvent event) {
if (indexOfChild(editText) > -1) {
// 可添加抛出收起事件代码
}
return super.onTouchEvent(event);
}
4.点击软键盘自带的收起按钮(软键盘收起)
问题卡在此处,经过资料的搜查,还是么能找到软键盘收起按钮事件监听的办法,最后在stackoverflow网站找到了从布局高度的变化来判断软键盘的打开和收起事件。
import android.graphics.Rect;import android.view.View;import android.view.ViewTreeObserver;import java.util.LinkedList;import java.util.List;public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener { public interface SoftKeyboardStateListener { void onSoftKeyboardOpened(int keyboardHeightInPx); void onSoftKeyboardClosed(); } private final List<SoftKeyboardStateListener> listeners = new LinkedList<SoftKeyboardStateListener>(); private final View activityRootView; private int lastSoftKeyboardHeightInPx; private boolean isSoftKeyboardOpened; public SoftKeyboardStateHelper(View activityRootView) { this(activityRootView, false); } public SoftKeyboardStateHelper(View activityRootView, boolean isSoftKeyboardOpened) { this.activityRootView = activityRootView; this.isSoftKeyboardOpened = isSoftKeyboardOpened; activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this); } @Override public void onGlobalLayout() { final Rect r = new Rect(); //r will be populated with the coordinates of your view that area still visible. activityRootView.getWindowVisibleDisplayFrame(r); final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... isSoftKeyboardOpened = true; notifyOnSoftKeyboardOpened(heightDiff); } else if (isSoftKeyboardOpened && heightDiff < 100) { isSoftKeyboardOpened = false; notifyOnSoftKeyboardClosed(); } } public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) { this.isSoftKeyboardOpened = isSoftKeyboardOpened; } public boolean isSoftKeyboardOpened() { return isSoftKeyboardOpened; } /** * Default value is zero (0) * @return last saved keyboard height in px */ public int getLastSoftKeyboardHeightInPx() { return lastSoftKeyboardHeightInPx; } public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) { listeners.add(listener); } public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) { listeners.remove(listener); } private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) { this.lastSoftKeyboardHeightInPx = keyboardHeightInPx; for (SoftKeyboardStateListener listener : listeners) { if (listener != null) { listener.onSoftKeyboardOpened(keyboardHeightInPx); } } } private void notifyOnSoftKeyboardClosed() { for (SoftKeyboardStateListener listener : listeners) { if (listener != null) { listener.onSoftKeyboardClosed(); } } }}
代码的使用:
final SoftKeyboardStateHelper softKeyboardStateHelper = new SoftKeyboardStateHelper(findViewById(R.id.activity_main_layout);softKeyboardStateHelper.addSoftKeyboardStateListener(...);// then just handle callbacks
地址链接:http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
从中选取了这段代码。
这样能一并解决以上4种情况,比较好的监听软键盘的打开和收起事件,目前正在使用中。
- <Android>监听软键盘打开收起事件(软键盘自带收起按钮)
- Android监听软键盘打开收起事件(软键盘自带收起按钮)
- <Android>监听软键盘打开收起事件(软键盘自带收起按钮)
- Android监听软键盘打开收起事件(软键盘自带收起按钮)
- <Android>监听软键盘打开收起事件(软键盘自带收起按钮)
- Android监听软键盘打开收起事件
- Android监听软键盘弹出与收起
- android无法监听软键盘收起解决方案
- Android 软键盘弹出/收起监听
- Android收起软键盘,隐藏软键盘
- 监听软键盘抬起收起状态
- 监听软键盘的收起和弹出
- 监听软键盘的弹起和收起
- android 监听软键盘的弹出和收起
- android实现软键盘弹出/收起的监听
- 监听软键盘的弹出与收起(近乎完美)
- android 软键盘弹出与收起
- Android 软键盘遮挡处理和软键盘弹出与收起的监听
- 蛇行矩阵
- 压缩感知的几位鼻祖
- [leetcode]Word Ladder II
- 禁用ARC,解决“ARC forbids explicit message send of ‘release’”
- Visual C++ 游戏开发笔记 纹理映射技术(一)
- <Android>监听软键盘打开收起事件(软键盘自带收起按钮)
- 阻塞队列
- 【设计模式】-工厂模式(Factory)
- jquery表单实现表单序列化
- ARM M4特点
- android studio Gradle如果不能找依赖的包(Gradle can't find dependency (Android support library)),教你如何解决
- IOS制作一个漂亮的登录界面
- EditText set cursor 位置 Demo
- GNU c __attribute__详解