Android TimePicker(滚轮式)无法正确响应ScrollView中的flick手势
我有一个包含滚动视图的对话框,其中包含一个带有两个时间选择器的布局 计时器选择器是ICS中较新的样式 问题是,当你通过拖动或轻弹轮子来改变时间时,它们似乎在争夺焦点。它将稍微更改时间,然后布局将改为滚动 有什么想法吗?Android TimePicker(滚轮式)无法正确响应ScrollView中的flick手势,android,scrollview,timepicker,Android,Scrollview,Timepicker,我有一个包含滚动视图的对话框,其中包含一个带有两个时间选择器的布局 计时器选择器是ICS中较新的样式 问题是,当你通过拖动或轻弹轮子来改变时间时,它们似乎在争夺焦点。它将稍微更改时间,然后布局将改为滚动 有什么想法吗? 提前感谢。我在使用全息主题时遇到了同样的问题,下面是我找到解决方案的地方: 您必须实现自定义日期选择器或时间选择器,并重写以下方法: @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (
提前感谢。我在使用全息主题时遇到了同样的问题,下面是我找到解决方案的地方: 您必须实现自定义日期选择器或时间选择器,并重写以下方法:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
if (ev.getActionMasked() == MotionEvent.ACTION_DOWN)
{
ViewParent p = getParent();
if (p != null)
p.requestDisallowInterceptTouchEvent(true);
}
return false;
}
因为来自Klemens Zleptnig的链接已断开,所以这里有一个完整的示例。顺便说一句,此修复程序也有助于表格布局的滚动。我排除了计时器顶部大数字周围的区域,因为它们无论如何都不需要滚动事件 xml:
爪哇:
公共类MyTimePicker扩展了TimePicker{
公共MyTimePicker(上下文){
超级(上下文);
}
//这是重要的构造函数
公共MyTimePicker(上下文、属性集属性){
超级(上下文,attrs);
}
公共MyTimePicker(上下文上下文、属性集属性、int defStyleAttr){
super(上下文、attrs、defStyleAttr);
}
公共MyTimePicker(上下文上下文、属性集属性、int-defStyleAttr、int-defStyleRes){
super(context、attrs、defStyleAttr、defStyleRes);
}
@凌驾
公共布尔值onInterceptTouchEvent(MotionEvent ev)
{
if(ev.getActionMasked()==MotionEvent.ACTION\u向下){
//排除视图的顶部
如果(ev.getY()
你是一个拥护者,我尝试了很多东西,实现触控式侦听器不起作用,但它起了作用。对于使用它的任何人,请确保还定义了正确的构造函数:public CustomDatePicker(Context Context,AttributeSet attrs){super(Context,attrs);}
<com.name.app.MyTimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
.../>
public class MyTimePicker extends TimePicker {
public MyTimePicker(Context context) {
super(context);
}
//This is the important constructor
public MyTimePicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTimePicker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyTimePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
//Excluding the top of the view
if(ev.getY() < getHeight()/3.3F)
return false;
ViewParent p = getParent();
if (p != null)
p.requestDisallowInterceptTouchEvent(true);
}
return false;
}
}