Я обнаружил, что @Stefan Haustein очень близко подходит к моему опыту, но не уверен на 100%. Мое предложение:
setLeft()
/ setRight()
/ setBottom()
/ setTop()
иногда не работает.
- Если вы хотите временно установить позицию (например, для анимации, не затрагивающей иерархию) , когда представление было добавлено и показано , просто используйте
setX()
/ setY()
вместо. (Вы можете искать больше в разница setLeft()
и setX()
)
- И обратите внимание, что X, Y кажутся абсолютными, и это было поддержано AbsoluteLayout, который сейчас устарел. Таким образом, вы чувствуете, что X, Y, скорее всего, больше не поддерживается. И да, но только частично. Это означает, что если ваш вид добавлен, setX (), setY () будут отлично работать ; в противном случае , когда вы пытаетесь добавить представление в макет группы представлений (например, FrameLayout, LinearLayout, RelativeLayout), вы должны установить его LayoutParams с marginLeft , marginTop вместо этого (setX (), setY () в этом случае иногда не будут работать).
- Установка позиции представления с помощью marginLeft и marginTop - это несинхронизированный процесс. Так что нужно немного времени для обновления иерархии . Если вы используете представление сразу после установки для него поля , вы можете получить неправильное значение .