Я бы хотел, чтобы ScrollView начинался с самого низа. Любые методы?
android
android-scrollview
Ноа Сейдман
источник
источник
Ответы:
scroll.fullScroll(View.FOCUS_DOWN)
Также должно работать.Поместите это в
scroll.Post(Runnable run)
Код Котлина
источник
Вы должны запустить код внутри scroll.post так:
источник
scroll.scrollTo(0, scroll.getHeight());
для перехода к нижней частиscroll.smoothScrollTo(0, scroll.getHeight());
scrollView.post { scrollView.fullScroll(View.FOCUS_DOWN) }
scroll.fullScroll(View.FOCUS_DOWN)
приведет к смене фокуса. Это приведет к некоторому странному поведению при наличии нескольких фокусируемых видов, например, двух EditText. Есть другой способ для этого вопроса.Это хорошо работает.
Удлинение Котлина
источник
Иногда scrollView.post не работает
НО если вы используете scrollView.postDelayed, он точно будет работать
источник
Что лучше всего сработало для меня
источник
Я увеличиваю, чтобы работать отлично.
Заметка
Этот ответ - обходной путь для действительно старых версий Android. Сегодня
postDelayed
эта ошибка больше не существует, и вы должны ее использовать.источник
postDelayed
:)Я попробовал это успешно.
источник
Когда представление еще не загружено, вы не можете прокрутить. Вы можете сделать это «позже» с помощью поста или вызова в спящем режиме, как указано выше, но это не очень элегантно.
Лучше спланировать прокрутку и сделать это на следующем onLayout (). Пример кода здесь:
https://stackoverflow.com/a/10209457/1310343
источник
Одна вещь, чтобы рассмотреть то, что НЕ установить. Убедитесь, что ваши дочерние элементы управления, особенно элементы управления EditText, не имеют свойства RequestFocus. Это может быть одним из последних интерпретируемых свойств макета, и он будет переопределять параметры гравитации для своих родителей (макет или ScrollView).
источник
Вот еще несколько способов прокрутки вниз
С помощью
Если вы уже выложили скроллвью
Если ваше прокручиваемое представление не закончено (например: вы прокрутите вниз в
onCreate
методе Activity ...)источник
Не совсем ответ на вопрос, но мне нужно было прокрутить вниз, как только EditText получил фокус. Однако принятый ответ заставил бы ET также сразу потерять фокус (к ScrollView, который я предполагаю).
Мой обходной путь был следующим:
источник
Я на самом деле обнаружил, что двойной вызов fullScroll делает свое дело:
Это может быть связано с активацией метода post () сразу после выполнения первой (неудачной) прокрутки. Я думаю, что такое поведение происходит после любого предыдущего вызова метода в myScrollView, поэтому вы можете попробовать заменить первый метод fullScroll () на что-либо еще, что может иметь отношение к вам.
источник
Использование есть еще один крутой способ сделать это с сопрограммами Kotlin. Преимущество использования сопрограммы по сравнению с обработчиком с работоспособным (post / postDelayed) состоит в том, что он не запускает дорогой поток для выполнения отложенного действия.
Важно указать HandlerContext сопрограммы в качестве пользовательского интерфейса, в противном случае отложенное действие не может быть вызвано из потока пользовательского интерфейса.
источник
В этих случаях использовалось только scroll.scrollTo (0, sc.getBottom ()) не работают, используйте его с помощью scroll.post
Пример:
источник
Одна возможная причина того, почему
scroll.fullScroll(View.FOCUS_DOWN)
не может работать, даже завернутый в.post()
заключается в том, что представление не выложено. В этом случае View.doOnLayout () может быть лучшим вариантом:Или что-то более проработанное для смелых душ: https://chris.banes.dev/2019/12/03/suspending-views/
источник