Отключить действие ScrollView - PullRequest
       25

Отключить действие ScrollView

15 голосов
/ 09 февраля 2010

В моем приложении у меня есть строка для увеличения ширины виджета (путем перетаскивания линии вправо / влево), и я включил ScrollView в той же операции. Мне нужно отключить действие просмотра прокрутки, когда пользователь касается линии и когда пользователь отпускает, оно должно быть включено. ScrollView должен быть в видимом состоянии, но действие представления прокрутки должно быть отключено. Пожалуйста, помогите мне в решении этой проблемы. Я пробовал с этим, но никто из них не работает.

scroll.setEnabled(false); 
scroll.setFocusable(false); 
scroll.setHorizontalScrollBarEnabled(false); 
scroll.setVerticalScrollBarEnabled(false);

Заранее спасибо.

Ответы [ 3 ]

48 голосов
/ 23 февраля 2011

Это может быть немного поздно, но я столкнулся с той же проблемой, поэтому мое решение аналогично выше, пришлось отключить OnTouchListener следующим образом:

// Get the ScrollView
final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview);


// Disable Scrolling by setting up an OnTouchListener to do nothing
myScroll.setOnTouchListener( new OnTouchListener(){ 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true; 
    }
});


// Enable Scrolling by removing the OnTouchListner
tvDisplayScroll.setOnTouchListener(null);    
37 голосов
/ 10 октября 2011

Это немного поздно, но еще более простой способ - просто получить вашего родителя <a href="http://developer.android.com/reference/android/view/ViewGroup.html#requestDisallowInterceptTouchEvent%28boolean%29" rel="noreferrer">ViewGroup</a> и позвонить ему requestDisallowInterceptTouchEvent(true). Это приводит к тому, что не только непосредственный родитель (представление прокрутки), но и любые другие родительские объекты, которые могут перехватывать касание, игнорируют его в течение определенного события. Это замечательно, если у вас есть перетаскиваемый дочерний элемент и перетаскиваемый родитель и вы хотите отключить перетаскивание родительского элемента во время перетаскивания дочернего элемента.

Это также более общее решение, чем конкретное отключение прокрутки. Если вы повторно используете перетаскиваемый дочерний вид в другом месте, он все равно будет работать: вам не нужно знать идентификатор представления прокрутки. Код, который можно многократно использовать без изменений, всегда хорош.

0 голосов
/ 01 декабря 2015

Если кто-то использует Android L или более позднюю версию и переопределяет onTouch и onInterceptTouchEvent не работает:
попробуйте переопределить onStartNestedScroll и return false.

Существует также новый атрибут XML nestedScrollingEnabled, но кажется, что он должен быть на представлении, которое пропускает событие прокрутки, а не на ScrollView, затронутом утечкой, или где-нибудь в иерархии макетов между ними. Поэтому, если вы заранее не знаете, какие дочерние ScrollViews у вас могут быть, переопределение onStartNestedScroll для задействованного ScrollView - это то, что вам нужно.

...