Android viewpager отключить прокрутку

Можно ли отключить прокрутку на ViewPager

У меня есть ViewPager , который создает экземпляр View . Я хотел бы на мгновение отключить прокрутку окна просмотра и дочерних кнопок, пока в представление возвращается результат поиска. Я звонил viewPager.setEnabled(false) , но это не отключило его.

У кого-нибудь есть идеи?

13 ответов

Простое решение — создать собственный подкласс ViewPager с флагом private boolean , isPagingEnabled . Затем переопределите методы onTouchEvent и onInterceptTouchEvent . Если isPagingEnabled равно true, вызвать метод super , иначе return .

Затем в своем файле Layout.XML замените все теги тегами .

Этот код был адаптирован из этого сообщения в блоге.

Новый класс ViewPager2 от androidx позволяет отключить прокрутку методом setUserInputEnabled (false)

Ответ слэйтона работает нормально. Если вы хотите прекратить смахивать, как обезьяна, вы можете переопределить OnPageChangeListener с помощью

Таким образом, вы можете проводить только бок о бок

Затем в файле Layout.XML замените любые теги — com.android.support.V4.ViewPager — тегами — com.yourpackage.NonSwipeableViewPager —.

То же решение, но в Котлине:

Я создал версию Kotlin на основе преобразования этого ответа с Java: https://stackoverflow.com/a/13437997/8023278

Не существует встроенного способа отключения перелистывания между страницами ViewPager, требуется расширение ViewPager, которое переопределяет onTouchEvent и onInterceptTouchEvent, чтобы предотвратить действие пролистывания. Чтобы сделать его более универсальным, мы можем добавить метод setSwipePagingEnabled для включения / отключения перелистывания между страницами.

Затем в нашем макете xml мы используем наш новый SwipeLockableViewPager вместо стандартного ViewPager

Теперь в нашей активности / фрагменте мы можем вызвать myViewPager.setSwipePagingEnabled(false) , и пользователи не смогут перелистывать страницы

По состоянию на 2020 год у нас есть ViewPager2. Если вы переходите на ViewPager2, существует встроенный метод для отключения пролистывания: < >

Как насчет этого:
Я использовал CustomViewPager
а затем переопределите метод scrollTo
Я проверял движение, когда делал много маленьких свайпов, на другие страницы оно не прокручивается.

Вот ответ в Котлине и androidX

Лучшее решение, которое сработало для меня:

После этого прокрутка будет отключена на ощупь, и вы все равно сможете использовать метод setCurrentItem для смены страницы.

В моем случае использования ViewPager 2 alpha 2 работает приведенный ниже фрагмент.

Возможность отключить ввод данных пользователем (setUserInputEnabled, isUserInputEnabled)

Обратитесь к этому для получения дополнительных изменений в viewpager2 1.0.0-alpha02

Также были внесены некоторые изменения в последнюю версию ViewPager 2 alpha 4

Атрибуты ориентации и isUserScrollable больше не являются частью SavedState

Обратитесь к этому для получения дополнительных изменений в viewpager2 # 1.0.0-alpha04

Читайте также:  Wpa tester для android

Предлагаю другой способ решения этой проблемы. Идея заключается в том, чтобы обернуть ваш viewPager с помощью scrollView, так что, когда этот scrollView не прокручивается, ваш viewPager тоже не прокручивается.

Источник

Можно ли отключить прокрутку на ViewPager

У меня есть ViewPager который создает экземпляр представления. Я хотел бы временно отключить прокрутку кнопок просмотра и дочерних кнопок, в то время как результат поиска возвращается в представление. Я viewPager.setEnabled(false) но это не отключает его.

У кого-нибудь есть идеи?

Простым решением является создание собственного подкласса ViewPager с private boolean флагом isPagingEnabled . Затем переопределите методы onTouchEvent и onInterceptTouchEvent . Если isPagingEnabled равно true, вызовите метод super , иначе return .

Затем в файле Layout.XML замените теги тегами .

Этот код был адаптирован из этого сообщения в блоге .

Для этого есть легкое решение:

Если вы хотите отключить прокрутку viewpager, выполните следующие действия:

И когда вы захотите переустановить его, тогда:

Это сделает трюк.

Вот мой легкий вариант ответа Slayton:

С моим кодом вы можете отключить пейджинг с помощью setEnable() .

Я нашел простое решение.

Я предлагаю другой способ решить эту проблему. Идея заключается в том, чтобы обернуть ваш viewPager с помощью scrollView, так что, когда этот scrollView не прокручивается, ваш viewPager также не прокручивается.

Вот мой XML-макет:

Не требуется код.

Прекрасно работает для меня.

Ответ Slayton отлично работает. Если вы хотите остановить прокрутку, как обезьяну, вы можете переопределить OnPageChangeListener с помощью

Таким образом, вы можете прокручивать бок о бок

Как насчет этого :
Я использовал CustomViewPager
И затем, переопределить метод scrollTo
Я проверил движение, выполняя множество мелких щелчков, он не перескакивает на другие страницы.

Чтобы включить салфетки

Лучшее решение, которое сработало для меня:

После этого прокрутка будет отключена прикосновением, а затем вы можете использовать метод setCurrentItem для изменения страницы.

Переопределение только onTouchEvent и onInterceptTouchEvent недостаточно, если у вас есть сам ViewPager внутри другого ViewPager.

Child ViewPager будет ставить горизонтальные прокрутки событий касания от родительского ViewPager, если он не расположен на первой / последней странице.

Источник

How to disable swiping in ViewPager2?

Is it possible to enable-disable swiping in new android viewpager2 component?

4 Answers 4

Now it is possible to enable-disable swiping viewpager2 using Version 1.0.0-alpha02

Use implementation ‘androidx.viewpager2:viewpager2:1.0.0-alpha02’

New features

  • Ability to disable user input ( setUserInputEnabled , isUserInputEnabled )

API changes

Bug fixes

  • FragmentStateAdapter stability fixes

SAMPLE CODE to disable swiping in viewpager2

Читайте также:  Клавиатурный шпион для андроид 4pda

SAMPLE CODE to enable swiping in viewpager2

Under the hood ViewPager2 works with RecyclerView for inflating the fragment views, but the RecyclerView is hidden so they make it more idiot proof.

Hacky way is to get the child at position zero which is the RecyclerView and disable scrolling in the layout manager, by wrapping the layout manager:

Please beware that if the API changes the layout manager used for the RecyclerView, i.e they move away from the LinearLayoutManager this wont work and it will need some methods overriden and ensure super methods are called.

Second approach is subclass the ViewPager2 which is ViewGroup and then do the magic in intercepting touch events, before they are dispatched to the child views (as you would guess the RecyclerView ) and be careful not to prevent clicks.

Источник

Is it possible to disable scrolling on a ViewPager

I have a ViewPager which instantiates a View . I’d like to disable both the scrolling of the viewpager and the child buttons momentarily while a search result is returned to the view. I’ve calling viewPager.setEnabled(false) but this doesn’t disable it.

Anyone got any ideas?

15 Answers 15

A simple solution is to create your own subclass of ViewPager that has a private boolean flag, isPagingEnabled . Then override the onTouchEvent and onInterceptTouchEvent methods. If isPagingEnabled equals true invoke the super method, otherwise return .

Then in your Layout.XML file replace any tags with tags.

This code was adapted from this blog post.

There is an easy fix for this one:

When you want to disable the viewpager scrolling then:

And when you want to re-enable it then:

That will do the trick.

Here is my light weight variant of slayton’s answer:

With my code you can disable the paging with setEnable() .

I found a simple solution.

I suggest another way to solve to this problem. The idea is wrapping your viewPager by a scrollView, so that when this scrollView is non-scrollable, your viewPager is non-scrollable too.

Here is my XML layout:

Works fine for me.

In my case of using ViewPager 2 alpha 2 the below snippet works

Ability to disable user input (setUserInputEnabled, isUserInputEnabled)

refer to this for more changes in viewpager2 1.0.0-alpha02

Also some changes were made latest version ViewPager 2 alpha 4

orientation and isUserScrollable attributes are no longer part of SavedState

refer to this for more changes in viewpager2#1.0.0-alpha04

To disable swipe

Читайте также:  Steam achievement manager android

To enable swipe

The best solution that worked for me is:

After this the scroll will be disabled by touch and then you can still use setCurrentItem method to change page.

Here’s an answer in Kotlin and androidX

How about this :
I used CustomViewPager
and next, override scrollTo method
I checked the movement when doing a lot of small swipes, it doesn’t scroll to other pages.

I created a Kotlin version based on converting this answer from Java: https://stackoverflow.com/a/13437997/8023278

There is no built in way to disable swiping between pages of a ViewPager, what’s required is an extension of ViewPager that overrides onTouchEvent and onInterceptTouchEvent to prevent the swiping action. To make it more generalised we can add a method setSwipePagingEnabled to enable/disable swiping between pages.

Then in our layout xml we use our new SwipeLockableViewPager instead of the standard ViewPager

Now in our activity/fragment we can call myViewPager.setSwipePagingEnabled(false) and users won’t be able to swipe between pages

As of 2020 we now have ViewPager2. If you migrate to ViewPager2 there is a built in method to disable swiping: myViewPager2.isUserInputEnabled = false

Источник

Как отключить или включить прокрутку viewpager в android

То, что я пытаюсь сделать: я пытаюсь включить / отключить прокрутку пейджера программно, когда программа запущена

Пример: когда поток, если я проверяю условие, и если он возвращает true разрешает прокрутку, и если условие возвращает false отключите прокрутку.

Решение, которое я использую, – это

Затем выберите это вместо встроенного viewpager в XML

Вам просто нужно вызвать метод setPagingEnabled с «false», и пользователи не смогут прокручивать страницы.

Проблема с вышеописанной методологией: я не могу установить свойство в потоке, I: e …. Я либо могу включить или отключить прокрутку. Но я не могу этого сделать на основании условия

Вопрос:

  1. Могу ли я достичь своей цели каким-то другим способом, если да, то что это?
  2. Или это невозможно?

Отключить прокрутку прогматически,

И используйте это, чтобы провести вручную

В вашем пользовательском адаптере пейджера просмотра переопределите эти методы в ViewPager .

И чтобы включить, просто верните каждый super метод:

super.onInterceptTouchEvent(event) и super.onTouchEvent(event) .

Лучшее решение для меня. Во-первых, вы создаете класс следующим образом:

-Тогда измените это в своем макете: для этого

-Наконец, вы можете отключить его: view_pager.disableScroll(true); Или включить его: view_pager.disableScroll(false);

Надеюсь, что это поможет вам 🙂

Я нашел другое решение, которое сработало для меня, следуя этой ссылке

Он в основном отменяет метод canScrollHorizontally чтобы отключить прокрутку пальцем. Как бы ни был установлен setCurrentItem .

Источник

Оцените статью