Android studio scrollview не прокручивается

ScrollView и HorizontalScrollView

При большом количестве информации, которую нужно поместить на экране приходится использовать полосы прокрутки. В Android существуют специальные компоненты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от ViewGroup. Обратите внимание, что класс TextView использует свою собственную прокрутку и не нуждается в добавлении отдельных полос прокрутки. Но использование отдельных полос даже с TextView может улучшить вид вашего приложения и повышает удобство работы для пользователя.

На панели инструментов компоненты можно найти в разделе Containers.

В контейнеры ScrollView и HorizontalScrollView можно размещать только один дочерний элемент (обычно LinearLayout), который в свою очередь может быть контейнером для других элементов. Виджет ScrollView, несмотря на свое название, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView. Обычно ScrollView используют в качестве корневого элемента, а HorizontalScrollView в качестве дочернего. Можно и наоборот, пробуйте.

В в теле метода onCreate() создайте ссылку на элемент TextView, объявленный в XML-разметке, и запишите в него через метод setText() какой-нибуль длинный текст, который не поместится в видимые размеры экрана устройства:

Запустив проект, вы должны увидеть вертикальную и горизонтальную полосы прокрутки при попытке скролирования.

Если полосы прокрутки вас раздражают, то используйте атрибут android:scrollbars=»none», который скроет их.

По такому же принципу можете вложить ImageView, чтобы просматривать большие картинки:

Методы scrollBy() и scrollTo()

Вы можете программно прокручивать контент с помощью методов scrollBy() и scrollTo(). Например, можно организовать автоматическую прокрутку во время чтения. В нашем примере мы будем прокручивать контент с помощью трёх кнопок.

Сам код для методов:

Дополнительное чтение

Библиотека ParallaxScrollView с использованием эффекта параллакса. Вы прокручиваете длинный текст, а задний фон прокручивается чуть медленнее. Возможно, кому-то пригодится. Там же можно скачать готовое демо и просмотреть в действии.

Источник

Могу ли я прокручивать ScrollView программно в Android?

есть ли способ прокрутить ScrollView программно на определенную позицию?

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

16 ответов

ответ от Pragna не всегда работает, попробуйте следующее:

я хотел, чтобы scrollView прокручивался непосредственно после onCreateView () (не после, например, нажатия кнопки). Чтобы заставить его работать, мне нужно было использовать ViewTreeObserver:

Читайте также:  Обновленный вайбер для андроида

но будьте осторожны, что это будет называться каждый раз, когда что-то получает layouted (e.g Если вы установили вид невидимый или аналогичный), поэтому не забудьте удалить этот прослушиватель, если он вам больше не нужен:

public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim) на SDK Lvl

public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim) в SDK Lvl >= 16

использовать что-то вроде этого:

здесь много хороших ответов, но я хочу добавить только одну вещь. Иногда случается, что вы хотите прокрутить ScrollView до определенного вида макета, а не полный прокрутки вверх или вниз.

простой пример: в регистрационной форме, если пользователь нажимает кнопку «Регистрация», когда текст редактирования формы не заполнен, вы хотите прокрутить до этого конкретного текста редактирования, чтобы сообщить пользователю, что он должен заполнить это поле.

В этом случае, вы можете сделайте что-нибудь вроде этого:

или, если вы хотите гладкую прокрутку вместо мгновенной прокрутки:

очевидно, вы можете использовать любой тип представления вместо редактирования текста. Обратите внимание, что getBottom() возвращает координаты представления на основе его родительского макета, поэтому все виды, используемые внутри ScrollView, должны иметь только родительский (например, линейный макет).

Если у вас есть несколько родителей внутри ребенка ScrollView, единственное решение, которое я нашел вызвать requestChildFocus на родительский вид:

но в этом случае вы не можете иметь гладкий свиток.

Я надеюсь, что этот ответ может помочь кому-то с такой же проблемой.

Источник

Android: ScrollView не прокручивается с помощью клавиатуры

у меня есть макет с некоторыми видами, из которых один является EditText. Макет легко помещается на одной странице, но, когда мягкая клавиатура отсутствует, макет не прокручивается. Вот резюме моего макета:

и в моем манифесте я объявил атрибутов:

кто-нибудь знает, почему это не работает и как убедиться, что он работает?

7 ответов

У меня была та же проблема, и я проверил свою активность в манифесте, и причина, по которой она не работала, заключается в том, что я не использовал это свойство:

теперь он отлично работает и не нужно делать дополнительные якоря.

хорошо, по-видимому, ScrollView android:layout_height не установлено wrap_content . Я установил его на match_parent и выберите android:layout_above кнопке в нижней части страницы.

не спрашивайте меня, почему, но это исправили проблему.

добавить android:windowSoftInputMode=»stateHidden|adjustResize» к вашему тегу в AndroidManifest.XML-файл. Это приведет к изменению размера экрана влево по пространству после отображения мягкой клавиатуры. Таким образом, Вы сможете прокручивать легко.

в моем случае ничего из вышеперечисленного не сработало.

Я item name=»android:windowTranslucentStatus»>true в моей теме. И это было исправлено установкой android:fitsSystemWindows=»true» в Родительском макете, где находится мой scrollview.

Читайте также:  Вилли машинка для андроида

моя проблема была с HorizontalScrollView. В моем случае мне пришлось установить HorizontalScrollView в:

в AndroidManifest.xml действие имеет значение:

надеюсь, это поможет любому, кто столкнется с этой странной ошибкой.

попробуйте установить ScrollView в качестве родительского макета. Это работает как шарм для меня!

попробуйте это в манифесте android ..

Источник

ScrollView и HorizontalScrollView

При большом количестве информации, которую нужно поместить на экране приходится использовать полосы прокрутки. В Android существуют специальные компоненты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от ViewGroup. Обратите внимание, что класс TextView использует свою собственную прокрутку и не нуждается в добавлении отдельных полос прокрутки. Но использование отдельных полос даже с TextView может улучшить вид вашего приложения и повышает удобство работы для пользователя.

На панели инструментов компоненты можно найти в разделе Containers.

В контейнеры ScrollView и HorizontalScrollView можно размещать только один дочерний элемент (обычно LinearLayout), который в свою очередь может быть контейнером для других элементов. Виджет ScrollView, несмотря на свое название, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView. Обычно ScrollView используют в качестве корневого элемента, а HorizontalScrollView в качестве дочернего. Можно и наоборот, пробуйте.

В в теле метода onCreate() создайте ссылку на элемент TextView, объявленный в XML-разметке, и запишите в него через метод setText() какой-нибуль длинный текст, который не поместится в видимые размеры экрана устройства:

Запустив проект, вы должны увидеть вертикальную и горизонтальную полосы прокрутки при попытке скролирования.

Если полосы прокрутки вас раздражают, то используйте атрибут android:scrollbars=»none», который скроет их.

По такому же принципу можете вложить ImageView, чтобы просматривать большие картинки:

Методы scrollBy() и scrollTo()

Вы можете программно прокручивать контент с помощью методов scrollBy() и scrollTo(). Например, можно организовать автоматическую прокрутку во время чтения. В нашем примере мы будем прокручивать контент с помощью трёх кнопок.

Сам код для методов:

Дополнительное чтение

Библиотека ParallaxScrollView с использованием эффекта параллакса. Вы прокручиваете длинный текст, а задний фон прокручивается чуть медленнее. Возможно, кому-то пригодится. Там же можно скачать готовое демо и просмотреть в действии.

Источник

Как прокрутить в начало длинного макета ScrollView?

Для части моего приложения пользователю представлен список имен и предлагается сгруппировать их по своему усмотрению.

(Обратите внимание, что код ListView был скопирован дословно из учебника Android Views. Я еще не настроил его на свои нужды, я просто пытаюсь выяснить, как это сделать.)

Читайте также:  Android callback from fragment to fragment

Основной макет – LinearLayout, содержащий ScrollView (называемый «groupsScrollView» в коде ниже), содержащий RelativeLayout. У меня есть несколько кнопок и текст, а затем мой ListView под ним, который отображает список имен. Все это выше, чем видимая область экрана, поэтому пользователю разрешено прокручивать вертикально, чтобы увидеть все.

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

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

Вот мой метод onCreate:

Линия «mainScrollView.pageScroll (View.FOCUS_UP)) является проблемой. Она не вызывает ошибку, но она ничего не делает. Я пробовал scrollTo (0,0), scrollDirection (View.FOCUS_UP ), И все остальное, о чем я могу думать.

Поскольку я не получаю ошибку, я должен предположить, что эти команды прокрутки на самом деле работают, но что они прокручиваются вверху списка ListView, а не вверху ScrollView или RelativeLayout, которые его содержат. Это, похоже, подтверждается собственным описанием Google метода scrollTo (int x, int y), где они говорят: «Эта версия также зажимает прокрутку до границ нашего ребенка».

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

он должен работать.

Имел ту же проблему, вероятно, какую-то ошибку.

Даже fullScroll(ScrollView.FOCUS_UP) из другого ответа не работает.
Единственное, что сработало для меня, – это вызвать scroll_view.smoothScrollTo(0,0) сразу после появления диалогового окна.

У меня была такая же проблема, и это исправило это. Надеюсь, это поможет вам.

scrollViewObject.fullScroll(ScrollView.FOCUS_UP) работает отлично, но только проблема с этой строкой заключается в том, что при заполнении данных в scrollViewObject вы вызываете немедленно. Вы должны подождать несколько миллисекунд, пока данные не будут заполнены. Попробуйте этот код:

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

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

Источник

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