Есть ли способ ScrollView
программно прокрутить до определенной позиции?
Я создал динамический, TableLayout
который находится в ScrollView
. Поэтому я хочу, чтобы в конкретном действии (например, нажатие кнопки и т. Д.) Конкретная строка автоматически прокручивалась до верхней позиции.
Является ли это возможным?
java
android
scrollview
android-scrollview
Арун Бадоле
источник
источник
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });
Ответ от Pragna не всегда работает, попробуйте это:
или
если вы хотите прокрутить, чтобы начать
источник
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
с успехом.mScrollView.smoothScrollTo(0, mScrollView.getBottom());
.post
здесь это нужно ?Я хотел, чтобы scrollView прокручивался непосредственно после onCreateView () (а не после, например, нажатия кнопки). Чтобы заставить его работать, мне нужно было использовать ViewTreeObserver:
Но имейте в виду, что это будет вызываться каждый раз, когда что-то размещается (например, если вы устанавливаете представление невидимым или похожим), поэтому не забудьте удалить этот слушатель, если он вам больше не нужен:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
на SDK Lvl <16или
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
в SDK Lvl> = 16источник
Здесь много хороших ответов, но я хочу добавить только одну вещь. Иногда случается, что вы хотите прокрутить ScrollView до определенного вида макета вместо полной прокрутки вверх или вниз.
Простой пример: если в форме регистрации пользователь нажимает кнопку «Регистрация», когда текст для редактирования формы не заполнен, вы хотите перейти к этому конкретному тексту для редактирования, чтобы сообщить пользователю, что он должен заполнить это поле.
В этом случае вы можете сделать что-то вроде этого:
или, если вы хотите плавную прокрутку вместо мгновенной прокрутки:
Очевидно, что вы можете использовать любой тип представления вместо редактирования текста. Обратите внимание, что getBottom () возвращает координаты представления на основе его родительского макета, поэтому все представления, используемые внутри ScrollView, должны иметь только родителя (например, линейный макет).
Если у вас есть несколько родителей внутри дочернего элемента ScrollView, единственное решение, которое я нашел, это вызвать requestChildFocus в родительском представлении:
но в этом случае вы не можете иметь плавную прокрутку.
Я надеюсь, что этот ответ может помочь кому-то с той же проблемой.
источник
Используйте что-то вроде этого:
или
источник
Попробуйте использовать
scrollTo
метод Подробнееисточник
Если вы хотите прокрутить мгновенно, вы можете использовать:
Или, если вы хотите прокрутить плавно и медленно, чтобы вы могли использовать это:
источник
catch
блок?** для прокрутки до желаемой высоты. Я нашел хорошее решение **
источник
Я получил это, чтобы работать, чтобы прокрутить до конца ScrollView (с TextView внутри):
(Я положил это на метод, который обновляет TextView)
источник
Да, ты можешь.
Допустим, у вас есть один
Layout
и внутри, у вас есть многоViews
. Поэтому, если вы хотите прокрутить любуюView
программу программным способом, вам нужно написать следующий фрагмент кода:Например:
content_main.xml
MainActivity.java
Если вы хотите прокрутить до определенного
View
, скажем, txtview , в этом случае просто напишите:И вы сделали.
источник
Примечание: если вы уже в теме, вы должны создать новую тему сообщения, или она не прокручивает новую длинную высоту до полного конца (для меня). Например:
источник
Добавление другого ответа, который не включает координаты.
Это позволит сфокусировать желаемый вид (но не на верхнюю позицию):
child - дочерний элемент этого ViewParent, который хочет сосредоточиться. Это представление будет содержать сфокусированное представление. Это не обязательно точка зрения, которая на самом деле имеет фокус.
сосредоточенный - вид, который является потомком ребенка, который на самом деле имеет фокус
источник
просто прокрутите страницу:
источник
Каждый публикует такие сложные ответы.
Я нашел простой ответ, для прокрутки до дна, приятно:
И, если необходимо, вы можете поместить вторую строку кода, приведенную выше, в исполняемый файл:
Мне понадобилось много исследований и игр, чтобы найти это простое решение. Надеюсь, вам это тоже поможет! :)
источник
Я использовал Runnable с sv.fullScroll (View.FOCUS_DOWN); Он отлично работает для немедленной проблемы, но этот метод заставляет ScrollView брать фокус со всего экрана, если вы выполняете эту автопрокрутку каждый раз, никакой EditText не сможет получать информацию от пользователя, мое решение использовало другой код под управлением:
sv.scrollTo (0, sv.getBottom () + sv.getScrollY ());
делая то же самое, не теряя внимания на важные взгляды
Привет.
источник
это работает для меня
источник
источник
источник