У меня очень долгая активность с прокруткой. Это форма с различными полями, которые пользователь должен заполнить. У меня есть флажок на полпути вниз по моей форме, и когда пользователь проверяет его, я хочу прокрутить до определенной части представления. Есть ли способ программной прокрутки до объекта EditText (или любого другого объекта просмотра)?
Кроме того, я знаю, что это возможно с использованием координат X и Y, но я хочу избежать этого, так как форма может меняться от пользователя к пользователю.
android
view
android-edittext
scrollview
programmatically-created
NotACleverMan
источник
источник
the form may changed from user to user
но вы можете просто использоватьmEditView.getTop();
Ответы:
источник
your_scrollview.post(...
Ответ Шерифа эль-Хатиба может быть значительно улучшен, если вы хотите прокрутить вид к центру вида прокрутки . Этот повторно используемый метод плавно прокручивает вид до видимого центра HorizontalScrollView.
Для вертикального
ScrollView
использованияисточник
Это хорошо работает для меня:
child - дочерний элемент этого ViewParent, который хочет сосредоточиться. Это представление будет содержать сфокусированное представление. Это не обязательно точка зрения, которая на самом деле имеет фокус.
сосредоточенный - вид, который является потомком ребенка, который на самом деле имеет фокус
источник
На мой взгляд, лучший способ прокрутки до заданного прямоугольника - через
View.requestRectangleOnScreen(Rect, Boolean)
. Вы должны вызвать егоView
, чтобы прокрутить и передать локальный прямоугольник, который вы хотите видеть на экране. Второй параметр должен бытьfalse
для плавной прокрутки иtrue
для немедленной прокрутки.источник
scrollview.smoothScrollTo
он не будет работать, если требуемый вид находится за пределами экрана (пробовал в эмуляторе Android с SDK версии 26)new Handler().post()
?Я создал небольшой служебный метод, основанный на ответе от WarrenFaith, этот код также учитывает, виден ли этот вид в представлении прокрутки, нет необходимости в прокрутке.
источник
scrollBounds
должен быть параметр дляscrollView.getHitRect
метода.Вы должны
TextView
сфокусировать ваш запрос:источник
Мой EditText был вложен в несколько слоев внутри моего ScrollView, который сам по себе не является корневым представлением макета. Поскольку getTop () и getBottom (), по-видимому, сообщали координаты в пределах содержащего их представления, я сделал так, чтобы он вычислял расстояние от вершины ScrollView до вершины EditText, просматривая родительские элементы EditText.
источник
Другое изменение будет:
или вы можете использовать
post()
метод.источник
Я знаю, что может быть слишком поздно для лучшего ответа, но желаемым идеальным решением должна быть система, подобная позиционеру. Я имею в виду, что когда система делает позиционирование для поля редактора, она помещает поле только на клавиатуре, так что, согласно правилам UI / UX, оно идеально.
То, что приведено ниже, делает способ позиционирования Android плавным. Прежде всего мы сохраняем текущую точку прокрутки в качестве контрольной точки. Во-вторых, чтобы найти лучшую точку прокрутки позиционирования для редактора, для этого мы прокручиваем вверх, а затем запрашиваем поля редактора, чтобы компонент ScrollView делал лучшее позиционирование. Гатча! Мы узнали лучшую позицию. Теперь то, что мы сделаем, - это плавная прокрутка от предыдущей точки до точки, которую мы нашли заново. Если вы хотите, вы можете пропустить плавную прокрутку, используя scrollTo вместо smoothScrollTo только.
ПРИМЕЧАНИЕ . Основным контейнером ScrollView является поле члена с именем scrollViewSignup, поскольку в моем примере был экран регистрации, как вы, возможно, многое поймете.
Если вы хотите использовать этот блок для всех экземпляров EditText и быстро интегрировать его с вашим кодом экрана. Вы можете просто сделать traverser как ниже. Для этого я сделал основной OnFocusChangeListener полем-членом с именем focusChangeListenerToScrollEditor и вызывал его во время onCreate, как показано ниже.
И реализация метода, как показано ниже.
Итак, что мы сделали здесь, так это заставили всех дочерних экземпляров EditText вызывать слушателя в фокусе.
Чтобы найти это решение, я проверил здесь все решения и сгенерировал новое решение для лучшего результата UI / UX.
источник
Приведенные выше ответы будут работать нормально, если ScrollView является прямым родителем ChildView. Если ваш ChildView переносится в другую ViewGroup в ScrollView, это вызовет неожиданное поведение, потому что View.getTop () получит позицию относительно своего родителя. В таком случае вам необходимо реализовать это:
источник
ссылка: https://stackoverflow.com/a/6438240/2624806
Следующее сработало намного лучше.
источник
Я думаю, что нашел более элегантное и менее подверженное ошибкам решение с использованием
Здесь нет математики, и, в отличие от других предлагаемых решений, она будет правильно обрабатывать прокрутку вверх и вниз.
Это хорошая идея, чтобы обернуть его,
postDelayed
чтобы сделать его более надежным, в случае, еслиScrollView
в данный момент меняетсяисточник
Изучение исходного кода Android, вы можете обнаружить , что уже есть функция члена
ScrollView
-scrollToChild(View)
- что делает именно то, что требуется. К сожалению, эта функция по какой-то неясной причине отмеченаprivate
. На основе этой функции я написал следующую функцию, которая находит первоеScrollView
вышеView
указанного в качестве параметра и прокручивает его так, чтобы оно стало видимым внутриScrollView
:источник
Мое решение:
источник
Отвечаю из моего практического проекта.
источник
В моем случае это не
EditText
такgoogleMap
. И это успешно работает, как это.источник
Que: Есть ли способ программно прокрутить представление прокрутки до определенного текста редактирования?
Ответ: Вложенное представление прокрутки в окне просмотра последней позиции добавило данные записи.
Есть ли способ программно прокрутить представление прокрутки до определенного текста редактирования?
источник
Вот что я использую:
Получается сумма прокрутки, необходимая для отображения нижней части представления, включая любое поле в нижней части этого представления.
источник
Вертикальная прокрутка, хорошо подходит для форм. Ответ основан на горизонтальной прокрутке Ахмадалибалоч.
источник
HorizontalScrollView
в этом методе?Вы можете использовать
ObjectAnimator
как это:источник
Исходя из ответа Шерифа, для моего варианта использования лучше всего подойдет следующее. Заметные изменения
getTop()
вместоgetBottom()
иsmoothScrollTo()
вместоscrollTo()
.источник
Если scrlMain - это ваш NestedScrollView, используйте следующее:
источник