android - keycode_enter - setimeoptions



Android:如何捕捉软输入/键盘上的长按事件? (1)

我自己找不到这个答案,所以我手动编码解决方案。 我在KeyboardView.OnKeyboardActionListeneronPress()onRelease()事件上使用了一个计时器。 这是重要的代码。 为简洁起见,许多TRY / CATCH被忽略。 在英文中,当按下某个键时,我启动一个计时器,等待通常等待的长按事件( ViewConfiguration.getLongPressTimeout() ),然后在原始线程上执行一个单击事件。 随后的密钥释放和按键可以取消任何活动的计时器。

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的软输入/键盘上捕获长按事件?

长版本:在一个Android应用程序中,我们有一个多行EditText,我们想要这样做:1.默认情况下,它显示一个DONE按钮,通过点击它,软输入/键盘将被关闭。 2.如果用户长按DONE(完成)按钮,其行为将被改为ENTER(回车)按钮,EditText(编辑文本)中会有一个新行。

对于需求#1,我在这里使用了解决方案: https : //stackoverflow.com/a/12570003/4225326

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

感谢您查看这个问题。





android-input-method