如何在不触摸时使键盘弹出 window 消失
How to make Keyboard's POPUP window dismiss when not touching
我正在创建一个自定义软键盘,并创建了一个 PopupWindow 以在长按某个键时显示,例如当您长按 E 时它会显示 E、É、È 供您选择。弹出窗口有一个关闭他的键,但我想删除这个键并让他在用户触摸时显示,然后用户长按,拖动到他想要的键并释放。
我正在使用 android API 8.
弹出窗口是在 KeyboardView class 的 onLongPress 方法中创建的。
final View custom = LayoutInflater.from(context)
.inflate(R.layout.popup_layout, new FrameLayout(context));
final PopupWindow popup = new PopupWindow(context);
popup.setContentView(custom);
popup.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
popup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
popup.showAtLocation(this, Gravity.NO_GRAVITY, popupKey.x, popupKey.y-50);
关闭弹窗的按钮:
buttonCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
popup.dismiss();
}
});
我觉得可以用onTouch方法的东西,但是怎么判断release事件呢?在哪里使用它?在键盘视图上,或者可能在弹出窗口上 window?
我设法做到了:
@Override
public boolean onTouchEvent(MotionEvent me){
if(popup != null && me.getAction() == MotionEvent.ACTION_UP){
popup.dismiss();
}
}
我首先创建了一个方法来在 logcat 上显示每个触摸事件的代码,然后我得到了当我释放触摸时出现的代码并与文档进行比较,它是 MotionEvent.ADCTION_UP。
有了这个,它只是关闭了弹出窗口。
我看到有一个私有函数叫KeyboardView.dismissPopupKeyboard()。
这很丑陋,但是因为我使用的是默认的 PopupWindow(我没有重写 OnLongPress())而且我看到 KeyboardView.onClick() 调用 dismissPopupKeyboard() 就是这样,我所做的是:
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP){
getOnKeyboardActionListener().onKey('1', null);
dismissPopupKeyboard();
}
return true; // Required for recieving subsequent events (ACTION_MOVE, ACTION_UP)
}
我正在创建一个自定义软键盘,并创建了一个 PopupWindow 以在长按某个键时显示,例如当您长按 E 时它会显示 E、É、È 供您选择。弹出窗口有一个关闭他的键,但我想删除这个键并让他在用户触摸时显示,然后用户长按,拖动到他想要的键并释放。
我正在使用 android API 8.
弹出窗口是在 KeyboardView class 的 onLongPress 方法中创建的。
final View custom = LayoutInflater.from(context)
.inflate(R.layout.popup_layout, new FrameLayout(context));
final PopupWindow popup = new PopupWindow(context);
popup.setContentView(custom);
popup.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
popup.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
popup.showAtLocation(this, Gravity.NO_GRAVITY, popupKey.x, popupKey.y-50);
关闭弹窗的按钮:
buttonCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
popup.dismiss();
}
});
我觉得可以用onTouch方法的东西,但是怎么判断release事件呢?在哪里使用它?在键盘视图上,或者可能在弹出窗口上 window?
我设法做到了:
@Override
public boolean onTouchEvent(MotionEvent me){
if(popup != null && me.getAction() == MotionEvent.ACTION_UP){
popup.dismiss();
}
}
我首先创建了一个方法来在 logcat 上显示每个触摸事件的代码,然后我得到了当我释放触摸时出现的代码并与文档进行比较,它是 MotionEvent.ADCTION_UP。 有了这个,它只是关闭了弹出窗口。
我看到有一个私有函数叫KeyboardView.dismissPopupKeyboard()。
这很丑陋,但是因为我使用的是默认的 PopupWindow(我没有重写 OnLongPress())而且我看到 KeyboardView.onClick() 调用 dismissPopupKeyboard() 就是这样,我所做的是:
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP){
getOnKeyboardActionListener().onKey('1', null);
dismissPopupKeyboard();
}
return true; // Required for recieving subsequent events (ACTION_MOVE, ACTION_UP)
}