Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android应用程序中避免意外的触摸输入?_Android_Disability - Fatal编程技术网

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

如何在android应用程序中避免意外的触摸输入?,android,disability,Android,Disability,出于研究目的,我正在开发一个本地Android应用程序(使用Java),它允许老年患者在门诊康复后记录营养日记 由于目标人群年龄较大,因此必须考虑到用户的手有震颤 我避免“意外”输入的方法: 是否有某种全局设置定义了两个触摸输入之间的“最短时间”?如果此时间不足,则应用程序仅执行第一次输入,并忽略此时间范围内的进一步输入 当然,我对其他方法和想法持开放态度。也许安卓本身为震颤患者提供输入帮助?到目前为止,我找不到任何对这个话题有帮助的东西 谢谢你的想法和建议 编辑:让您了解情况: 用户单击一个按

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

由于目标人群年龄较大,因此必须考虑到用户的手有震颤

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

当然,我对其他方法和想法持开放态度。也许安卓本身为震颤患者提供输入帮助?到目前为止,我找不到任何对这个话题有帮助的东西

谢谢你的想法和建议

编辑:让您了解情况:
用户单击一个按钮。这会导致用户界面发生更改,并在用户单击的位置显示一个新按钮。此按钮不应直接“可单击”。当然,其他位置的按钮也不应该直接反应。

为什么不将所有按钮放在一个数组中,并为它们提供相同的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);
}
ArrayList按钮=新建ArrayList;
按钮。添加(按钮1);
按钮。添加(按钮2);
按钮。添加(按钮3);
用于(按钮:按钮){
addOnClickListener(新视图.onClickListener(){
用于(按钮1:按钮){
按钮1.设置启用(假);
}

})

记住上次单击
按钮的时间,然后将该时间与下一次单击
按钮的时间进行比较:

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
        }
    }
});
对每个必须受到影响的
按钮执行此操作


你甚至可以创建“集群”通过使用多个
oldTime
newTime
按钮,如果ButtonOne和ButtonTwo彼此相邻,但应独立于ButtonThree和ButtonFour进行操作。

如何指定这是意外触摸?我的观点是,您有两个按钮,它们彼此相邻。如果用户正在尝试单击第一个按钮,但单击了第二个按钮。要处理这种情况吗?单击按钮时,请记住它被单击的时间(
System.currentTimeMillis()
),设置最后一个“NoClickWithThisAmountOfs”,并根据按钮的onClickListeners中的内容执行简单检查:
if((newTime-oldTime)>不单击此按钮(仅限FMS)
,然后不要忽略单击。@很高兴你是对的。我不能确定这些输入是否是无意的,但这是我的第一种方法。场景与你描述的稍有不同。用户单击一个按钮,UI刷新,在用户单击的同一位置将出现一个新按钮,不应无意中按下。谢谢@Neph,这似乎描述了我的方法。我将尝试一下。我还将建议更改按钮的状态(当用户可以/不能按下按钮时)你将如何在不同的活动之间共享
oldTime
?只是出于某种目的正常吗?@DemoDemo如果你禁用一个按钮,它也将不再可点击,这意味着OP必须在后台运行一个线程,在x秒后再次启用按钮。另外,我不确定禁用按钮是否也会改变它看起来是这样的,因为如果是这样的话,我就不会这样做,因为这会让用户感到困惑。@danielk你可以,是的。你也可以将它作为一个静态long存储在一个额外的类中,以便从多个活动/片段访问它。你写道,你在同一个位置用一个新按钮替换了按钮。这个切换大约需要多长时间。?如果你设置
noCli如果将此开关设置为例如2s,并且开关需要2s,那么这显然是不必要的。也许可以考虑将开关“延长”一点,因此它不是即时的,这也会给老年用户移动手指和“调整”的时间。如果单击单个按钮,则会禁用每个按钮,但如何重新启用它们?当按钮被禁用时,按钮不会对
onClickListener
事件作出反应,因此需要某种类型的计时器来重新启用它们。我可以想象,像这样更改按钮的状态是一种“昂贵”的方法。