NumberPicker внутри ScrollView

Допустим, у меня есть ScrollView LinearLayout (вертикальный) с NumberPicker внутри. Кроме того, LinearLayout содержит достаточно виджетов, поэтому он прокручивается.

Ниже приведен пример фрагмента XML-кода:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <!-- Some widgets here so it scrolls -->

    <NumberPicker
                android:id="@+id/npSec"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

</LinearLayout>

На Android 4.1.2 (Galaxy S3) он отлично работает... Вы прокручиваете макет и один раз прокручиваете NumberPicker - прокручивается только NumberPicker.

С другой стороны, на Android 4.0.x макет хорошо прокручивается, НО, когда NumberPicker пытается прокручиваться, он делает что-то неудобное, например, прокручивает половину значения и останавливается между значением; оттуда - только LinearLayout прокручивается, а NumberPicker застревает.

Этот парень задал точно такой же вопрос и не получил ответа: NumberPicker в ScrollView не прокручивается на Android 4.0.4

Как отключить ScrollView. Это не сработает, потому что ScrollView и NumberPicker являются вертикальными

Я буду очень признателен за любое хорошее решение или направление... Заранее спасибо, Марк.


person Mark    schedule 16.11.2013    source источник
comment
Вы решили это с тех пор? Я сталкиваюсь с той же самой проблемой прямо сейчас   -  person doplumi    schedule 18.02.2014


Ответы (1)


Я знаю, что это старый вопрос, но все же...

Это работает для меня:

numberPicker.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(final View v, final MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_MOVE && v.getParent() != null) {
                v.getParent().requestDisallowInterceptTouchEvent(true);
            }
            if (event.getAction() == MotionEvent.ACTION_UP) {
                v.performClick();
            }

            v.onTouchEvent(event);
            return true;
        }
    });
person User42    schedule 18.02.2015