如何避免 android 应用程序中的意外触摸输入?

How to avoid unintended touch-inputs in an android app?

出于研究目的,我正在开发一个本地 Android 应用程序(带有 Java),它允许在门诊康复后的老年患者记录营养日记。

由于目标群体的年龄较大,必须考虑到用户手部颤抖。

我避免“意外”输入的方法: 是否有某种全局设置定义了两次触摸输入之间的“最短时间”?如果这个时间不足,应用程序只执行第一个输入并忽略在此时间范围内的进一步输入。

当然,我对其他方法和想法持开放态度。也许 Android 本身就为震颤的人提供了输入辅助?到目前为止,我找不到任何可以帮助我解决这个话题的东西。

为了让您了解情况: 用户单击一个按钮。这会导致 UI 发生变化,并且新按钮会出现在用户单击的完全相同的位置。此按钮不应直接“可点击”。当然,其他位置的按钮也不应该直接反应。

你为什么不把所有的按钮放在一个数组中,并给它们所有相同的 onClickListener 接口 当 onClick 一个 for 循环遍历这个数组并禁用每个其他按钮时,就像这样

ArrayList<Button> buttons = new ArrayList<>;
buttons.add(button1);
buttons.add(button2);
buttons.add(button3);
for(Button button : buttons){

button.addOnClickListener(new View.onClickListener(){
    for(Button button1 : buttons){
       button1.setEnabled(false);
    }
});

记住单击最后一个 Button 的时间,然后将那个时间与单击下一个 Button 的时间进行比较:

final long noClickWithinThisAmountOfMS = 2000; //2000ms = 2 seconds
long oldTime = 0;
long newTime = 0;
Button buttonOne = (Button) view.findViewById(R.id.button_one);
Button buttonTwo = (Button) view.findViewById(R.id.button_two);

buttonOne.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        newTime = System.currentTimeMillis();

        if((newTime - oldTime) > noClickWithinThisAmountOfMS) {
            //Don't ignore the click
            oldTime = newTime;

            //TODO: Add actual "onClick" code here

        } //else: Ignore the click
    }
});

buttonTwo.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        newTime = System.currentTimeMillis();
        if((newTime - oldTime) > noClickWithinThisAmountOfMS) {
            oldTime = newTime;
            //TODO: Add actual "onClick" code here
        }
    }
});

对每个 Button 必须受影响的对象执行此操作。

您甚至可以通过使用多个 oldTimenewTime 以这种方式创建 "clusters" 个按钮,例如ButtonOne 和 ButtonTwo 彼此相邻,但应独立于 ButtonThree 和 ButtonFour。