如何避免 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
必须受影响的对象执行此操作。
您甚至可以通过使用多个 oldTime
和 newTime
以这种方式创建 "clusters" 个按钮,例如ButtonOne 和 ButtonTwo 彼此相邻,但应独立于 ButtonThree 和 ButtonFour。
出于研究目的,我正在开发一个本地 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
必须受影响的对象执行此操作。
您甚至可以通过使用多个 oldTime
和 newTime
以这种方式创建 "clusters" 个按钮,例如ButtonOne 和 ButtonTwo 彼此相邻,但应独立于 ButtonThree 和 ButtonFour。