gpt4 book ai didi

Android:如何在软输入/键盘上捕获长按事件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:43:45 24 4
gpt4 key购买 nike

问题的简短版本:如何在 Android 中捕获软输入/键盘上的长按事件?

长版:在 Android 应用程序中,我们有一个多行的 EditText,我们希望有这样的行为:1.默认显示一个DONE按钮,点击它,软输入/键盘将关闭。2. 如果用户长按 DONE 按钮,其行为将更改为 ENTER 按钮,并且在 EditText 中将有一个新行。

对于要求 #1,我使用了此处的解决方案:https://stackoverflow.com/a/12570003/4225326

对于要求 #2,我遇到的阻碍问题是如何捕获长按事件。我设置了 onEditorActionListener,但捕获的事件为空:http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html我查了一下文档,长按相关的方法是针对硬键盘的:http://developer.android.com/reference/android/view/View.html#onKeyLongPress(int , android.view.KeyEvent), 我找不到用于软输入/键盘的。

感谢您调查这个问题。

最佳答案

我自己找不到这个答案,所以我手动编写了解决方案。我在 KeyboardView.OnKeyboardActionListeneronPress()onRelease() 事件上使用了一个计时器。这是重要的代码。为了简洁起见,省略了许多 TRY/CATCH。在英语中,当一个键被按下时,我启动了一个计时器,它等待的时间与长按事件通常等待的时间相同 (ViewConfiguration.getLongPressTimeout()),然后执行一个 on-lo ng-click 原始线程上的事件。随后的按键释放和按键操作可以取消任何 Activity 计时器。

public class MyIME
extends InputMethodService
implements KeyboardView.OnKeyboardActionListener {
:
:
private Timer timerLongPress = null;
:
:

@Override
public void onCreate() {
super.onCreate();
:
:
timerLongPress = new Timer();
:
:
}

@Override
public void onRelease(final int primaryCode) {
:
:
timerLongPress.cancel();
:
:
}

@Override
public void onPress(final int primaryCode) {
:
:
timerLongPress.cancel();
:
:
timerLongPress = new Timer();

timerLongPress.schedule(new TimerTask() {

@Override
public void run() {

try {

Handler uiHandler = new Handler(Looper.getMainLooper());

Runnable runnable = new Runnable() {

@Override
public void run() {

try {

MyIME.this.onKeyLongPress(primaryCode);

} catch (Exception e) {
Log.e(MyIME.class.getSimpleName(), "uiHandler.run: " + e.getMessage(), e);
}

}
};

uiHandler.post(runnable);

} catch (Exception e) {
Log.e(MyIME.class.getSimpleName(), "Timer.run: " + e.getMessage(), e);
}
}

}, ViewConfiguration.getLongPressTimeout());
:
:
}

public void onKeyLongPress(int keyCode) {
// Process long-click here
}

关于Android:如何在软输入/键盘上捕获长按事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27435871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com