Android TimePicker(滚轮式)无法正确响应ScrollView中的flick手势

Android TimePicker(滚轮式)无法正确响应ScrollView中的flick手势,android,scrollview,timepicker,Android,Scrollview,Timepicker,我有一个包含滚动视图的对话框,其中包含一个带有两个时间选择器的布局 计时器选择器是ICS中较新的样式 问题是,当你通过拖动或轻弹轮子来改变时间时,它们似乎在争夺焦点。它将稍微更改时间,然后布局将改为滚动 有什么想法吗? 提前感谢。我在使用全息主题时遇到了同样的问题,下面是我找到解决方案的地方: 您必须实现自定义日期选择器或时间选择器,并重写以下方法: @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (

我有一个包含滚动视图的对话框,其中包含一个带有两个时间选择器的布局

计时器选择器是ICS中较新的样式

问题是,当你通过拖动或轻弹轮子来改变时间时,它们似乎在争夺焦点。它将稍微更改时间,然后布局将改为滚动

有什么想法吗?
提前感谢。

我在使用全息主题时遇到了同样的问题,下面是我找到解决方案的地方:

您必须实现自定义日期选择器或时间选择器,并重写以下方法:

@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;
    }
}