1

我已经onLongClickListener在 AndroidDialog中实现了使用计时器自动减少数字的按钮。这是代码

myIncreaseTimer = new Timer();
final Runnable runnable_decrease = new Runnable() {
    public void run() {
        int txt = Integer.parseInt(length.getText().toString());
        txt -= 1;
        length.setText(String.valueOf(txt));
        if (txt == 0) {
            myIncreaseTimer.cancel();
            myIncreaseTimer.purge();
            myIncreaseTimer = new Timer();
        }
    }
};
btnMinus.setOnLongClickListener(new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        myIncreaseTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(runnable_decrease);
            }
        }, 0, 300);
        return true;
    }
});

当我在活动而不是对话框中时,我可以通过onTouchEvent用户触摸屏幕来停止减少

@Override 
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        myIncreaseTimer.cancel();
        myIncreaseTimer.purge();
        myIncreaseTimer = new Timer();
    }
    return true;
}

但是,我不能在对话框中执行此操作。更重要的是,对话框没有 onTouchEvent。

有谁知道我该如何实施或应该onTouchEventDialog哪里停止增加计时器Dialog

4

2 回答 2

5

你不能在 Dialog 上处理 onTouch 所以

创建一个 Activity,在其上实现 onTouchListener,并在清单文件中

<activity android:theme="@android:style/Theme.Dialog">

所以,现在你的活动看起来像一个对话框,

于 2011-11-08T10:24:35.810 回答
2

因为 Dialog 并非旨在处理原始 onTouchEvents。考虑创建一个看起来像对话框的活动(透明主题,无标题栏)并覆盖它的 onTouchEvent 方法。

于 2011-11-08T10:17:09.680 回答