在我的Android应用程序中,我有一个布局,其中有七天的开始和结束按钮,每个按钮打开时间选择器用于选择他最喜欢的时间。我需要禁用多指触摸时间选择按钮(开始和结束时间按钮)。我的意思是禁用多指触摸,即如果同时触摸打开两个时间选择器的两个按钮。这是我的布局结构:
<LinearLayout>
.......
<ScrollView>
<LinearLayout>
<TableLayout>
<!--Sunday -->
<TableRow>
<Texview/>
<Button/> <!-- start time -->
<Button/> <!-- endtime -->
</TableRow>
..........
<!--Saturday -->
<TableRow>
<Texview/>
<Button/> <!-- start time -->
<Button/> <!-- endtime -->
</TableRow>
.............
<TableLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
我在android:splitMotionEvents="false"
,TableRow
和TableLayout
及其子ScrollView
中尝试了LinearLayout
,但它并未禁用多点触控和结束时间按钮。如何禁用开始和结束时间按钮的多点触控?请帮助我。
我也尝试了以下内容:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
答案 0 :(得分:2)
因此,使用CommonsWare回答我在我的应用程序中找到了正确的轨道,这是禁用多点触控的快速入侵。
对于我的应用程序,我在我的应用程序中的任何地方都不需要多头,事实上他们最不受欢迎。因此,在Activity
中,通过覆盖dispatchTouchEvent
,我们得到Action
,如果是MotionEvent.ACTION_POINTER_DOWN
,我就不会传递它。这是代码:
@Override
public boolean dispatchTouchEvent(@NonNull MotionEvent ev) {
return ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN || super.dispatchTouchEvent(ev);
}
但即使您只想禁用一个View
MultiTouch
,也可以通过覆盖其dispatchTouchEvent()
,onInterceptTouchEvent
或{{{}}来实现此目的。 1}}。
一点点注意事项:请记住不要间断地传递onTouchEvent()
,否则您的某些观点将保持按下状态。
答案 1 :(得分:1)
您无法“禁用”此功能,因为这与多点触控无关。此外,它们不是同时的,而是顺序的,因为两个单击事件都通过主应用程序线程路由。因此,欢迎您使用自己的业务逻辑来决定放弃第二次单击事件,例如:
步骤1:在您的活动或片段中有long lastClickTime=0L
来托管这些按钮。
步骤2:检查按钮单击处理程序顶部的SystemClock.elapsedRealtime()
(对于此答案,我们将其分配给long now
局部变量)。如果now-lastClickTime
低于某个阈值,则忽略点击事件,因为在其他点击事件发生后,它太快了。否则,您将lastClickTime
设置为now
并执行常规点击处理。