2

在计算器应用程序中,当按下返回/删除按钮时,不松开它,手机会振动,它会很快删除输入的数字。

我有一个 EditText 视图,当按下后退/删除按钮时,它只删除一个字符,我必须释放并再次按下它才能删除下一个字符。如何使后退/删除按钮在按下时快速删除,并使手机振动,与计算器应用程序中的后退/删除按钮相同?

这是我的 EditText 配置

    <EditText
        android:id="@+id/left_value"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="5"
        android:background="@drawable/border"
        android:hint="@string/enter_numerial"
        android:inputType="numberDecimal|numberSigned"
        android:textSize="14sp"
        android:paddingLeft="2dip"
        android:maxLength="15"/>
4

3 回答 3

4

我想这不是最好的解决方案,但它会做你需要的。

1)。让您Activity实现View.OnTouchListener并设置它

   yourButton.setOnTouchListener(this);

2)。创建该CountDownTimer类型的类字段。我称之为 mTimer。

将以下内容添加到OnTouch()方法中:

 @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:

            deleteChar();

                break;

            case MotionEvent.ACTION_MOVE:
                /*--- no action required ---*/
                break;

            case MotionEvent.ACTION_UP:

                mTimer.cancel();

                break;
            }


            return false;
        }
    });

3)。deleteChar()方法:

    private void deleteChar(){
    // set the desired interval. I'm gonna use 500ms before last char deletion.
mTimer = new CountDownTimer(9999999, 500) {

        @Override
        public void onTick(long millisUntilFinished) {
            if(yourEditText.getText().toString().length() > 0){
            String input = yourEditText.getText().toString();
            input = input.substring(0, input.length()-1); 
            yourEditText.setText(input);
            }

        }

        @Override
        public void onFinish() {

        }
    };
    mTimer.start();
}

上面的示例EditText以 1/2 秒的间隔删除 an 的最后一个字符。需要时使用Vibrator对象。

确保可以优化此代码。这应该只是给你一个基本的想法,如何执行你所要求的。

于 2013-11-06T01:16:12.647 回答
1

使用 OnKeyListener。侦听器实现的方法包含一个 KeyEvent 对象。可以通过查看事件类型来跟踪是up还是down,使用keyCode判断是否为delete按钮。

如果动作被关闭并且关键代码是删除按钮,则删除一个字符(可能在一个可运行文件中)。当操作启动(或取消)并按下 del 键时,停止删除(可能取消可运行)。

于 2013-11-06T00:51:43.910 回答
0

您可能需要使用 anOnTouchListener来捕捉用户按下和释放按钮的时间。然后,您可以使用Handler回调定期删除字符/单词/等并使用android.os.Vibrator服务进行振动。

于 2013-11-06T00:47:39.647 回答