android控制软键盘弹起,android 键盘监听弹起和关闭

这篇博客介绍了如何在Android应用中检测软键盘的打开和关闭状态,并提供了相应的回调方法。通过创建`SoftKeyboardStateHelper`类,监听布局变化来判断软键盘是否开启,从而实现对软键盘状态的监听。当软键盘开启和关闭时,会触发`onSoftKeyboardOpened`和`onSoftKeyboardClosed`方法,显示提示信息。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/Dota_wy/article/details/78781197

电话键

键名 描述 键值

KEYCODE_CALL 拨号键 5

KEYCODE_ENDCALL 挂机键 6

KEYCODE_HOME 按键Home 3

KEYCODE_MENU 菜单键 82

KEYCODE_BACK 返回键 4

KEYCODE_SEARCH 搜索键 84

KEYCODE_CAMERA 拍照键 27

KEYCODE_FOCUS 拍照对焦键 80

KEYCODE_POWER 电源键 26

KEYCODE_NOTIFICATION 通知键 83

KEYCODE_MUTE 话筒静音键 91

KEYCODE_VOLUME_MUTE 扬声器静音键 164

KEYCODE_VOLUME_UP 音量增加键 24

KEYCODE_VOLUME_DOWN 音量减小键 25

控制键

键名 描述 键值

KEYCODE_ENTER 回车键 66

KEYCODE_ESCAPE ESC键 111

KEYCODE_DPAD_CENTER 导航键 确定键 23

KEYCODE_DPAD_UP 导航键 向上 19

KEYCODE_DPAD_DOWN 导航键 向下 20

KEYCODE_DPAD_LEFT 导航键 向左 21

KEYCODE_DPAD_RIGHT 导航键 向右 22

KEYCODE_MOVE_HOME 光标移动到开始键 122

KEYCODE_MOVE_END 光标移动到末尾键 123

KEYCODE_PAGE_UP 向上翻页键 92

KEYCODE_PAGE_DOWN 向下翻页键 93

KEYCODE_DEL 退格键 67

KEYCODE_FORWARD_DEL 删除键 112

KEYCODE_INSERT 插入键 124

KEYCODE_TAB Tab键 61

KEYCODE_NUM_LOCK 小键盘锁 143

KEYCODE_CAPS_LOCK 大写锁定键 115

KEYCODE_BREAK Break/Pause键 121

KEYCODE_SCROLL_LOCK 滚动锁定键 116

KEYCODE_ZOOM_IN 放大键 168

KEYCODE_ZOOM_OUT 缩小键 169

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main5);

LinearLayout roots = findViewById(R.id.roots);

EditText editText = findViewById(R.id.editText);

softKeyboardStateHelper = new SoftKeyboardStateHelper(this);

softKeyboardStateHelper.addSoftKeyboardStateListener(this);

}

@Override

public void onSoftKeyboardOpened(int keyboardHeightInPx) {

Toast.makeText(Main5Activity.this, "键盘打开", Toast.LENGTH_SHORT).show();

}

@Override

public void onSoftKeyboardClosed() {

Toast.makeText(Main5Activity.this, "键盘关闭", Toast.LENGTH_SHORT).show();

}

@Override

public void onPointerCaptureChanged(boolean hasCapture) {

}

public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener {

private View activityRootView;

private int lastSoftKeyboardHeightInPx;

private boolean isSoftKeyboardOpened;

private int height ;//控制软键盘打开时机

public interface SoftKeyboardStateListener {

void onSoftKeyboardOpened(int keyboardHeightInPx);

void onSoftKeyboardClosed();

}

private final Listlisteners = new LinkedList();

public SoftKeyboardStateHelper(Activity contextObj) {

if (contextObj == null) {

Log.i("dota", "contextObj is null");

return;

}

activityRootView = findContentView(contextObj);

if (activityRootView!=null){

activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);

}

// this(activityRootView, false);

}

public SoftKeyboardStateHelper(Activity contextObj, boolean isSoftKeyboardOpened) {

if (contextObj == null) {

Log.i("dota", "contextObj is null");

return;

}

activityRootView = findContentView(contextObj);

if (activityRootView!=null){

activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);

}

// this.activityRootView = activityRootView;

// this.isSoftKeyboardOpened = isSoftKeyboardOpened;

}

private View findContentView(Activity contextObj) {

return contextObj.findViewById(android.R.id.content);

}

@Override

public void onGlobalLayout() {

final Rect r = new Rect();

activityRootView.getWindowVisibleDisplayFrame(r);

final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);

if (heightDiff == 1920){

height = 200;

}else {

height = 100;

}

if (!isSoftKeyboardOpened && heightDiff > height ) { // if more than 100 pixels, its probably a keyboard...

isSoftKeyboardOpened = true;

notifyOnSoftKeyboardOpened(heightDiff);

} else if (isSoftKeyboardOpened && heightDiff < height ) {

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();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值