¿Cómo puedo cambiar la posición de la vista a través del código? Como cambiar su posición X, Y. ¿Es posible?¿Cómo puedo establecer dinámicamente la posición de vista en Android?
Respuesta
Para cualquier cosa por debajo de Honeycomb (Nivel API 11) tendrás que usar setLayoutParams(...)
.
Si puede limitar su apoyo a Panal y hasta puede utilizar el setX(...)
, setY(...)
, setLeft(...)
, setTop(...)
, etc.
establecer la posición izquierda de este punto de vista con respecto a su padre:
view.setLeft(int leftPosition);
Establecer la posición derecha de este punto de vista con respecto a su padre:
view.setRight(int rightPosition);
Ajuste la posición de la parte superior de este punto de vista relativo a su padre:
view.setTop(int topPosition);
Establezca la posición inferior de esta vista con respecto a su pare nt:
view.setBottom(int bottomPositon);
Los métodos anteriores se utilizan para establecer la posición de la vista relacionada con su elemento primario.
Lo sentimos Estos métodos no están disponibles. ¿Me puede enviar algún código? – AB1209
Es HoneyComb (11) +. – Pijusn
"Este método debe ser llamado por el sistema de disposición y, por lo general, no se debe llamar de otra manera, ya que el diseño puede cambiar la propiedad en cualquier momento". – GDanger
Puede intentar utilizar los siguientes métodos, si está utilizando HoneyComb Sdk (API Nivel 11).
view.setX(float x);
El parámetro x es la posición visual x de esta vista.
view.setY(float y);
El parámetro y es la posición visual y de esta vista.
Espero que sea útil para usted. :)
Estoy trabajando en 2.2 Froyo y estos métodos no están disponibles en él. – AB1209
Usa RelativeLayout
, coloca tu vista en ella, obtén RelativeLayout.LayoutParams
objeto de tu vista y establece los márgenes que necesites. Luego llame al requestLayout()
en su vista. Esta es la única forma que conozco.
Sí, puede establecer dinámicamente la posición de vista en Android. Del mismo modo, tiene un ImageView
en LinearLayout
de su archivo xml. Así que puede establecer su posición a través de LayoutParams
. Pero asegúrese de tomar LayoutParams
de acuerdo con el diseño tomado en su archivo xml. Existen diferentes LayoutParams
según el diseño.
Aquí está el código para establecer:
LayoutParams layoutParams=new LayoutParams(int width, int height);
layoutParams.setMargins(int left, int top, int right, int bottom);
imageView.setLayoutParams(layoutParams);
espero que será útil para establecer la posición.
también tenga en cuenta que debe importar android.widget.LinearLayout.LayoutParams; porque el valor predeterminado es LayoutParams –
Yo recomiendo usar setTranslationX
y setTranslationY
. Solo estoy comenzando con esto yo mismo, pero estos parecen ser la forma más segura y preferida de mover una vista. Supongo que depende mucho de lo que intentes hacer exactamente, pero esto está funcionando bien para la animación 2D.
Hay una biblioteca llamada NineOldAndroids, que le permite usar la biblioteca de animación Honeycomb hasta la versión uno.
Esto significa que puede definir izquierda, derecha, la traducción X/Y con una interfaz ligeramente diferente.
Así es como funciona:
ViewHelper.setTranslationX(view, 50f);
Usted sólo tiene que utilizar los métodos estáticos de la clase ViewHelper, pasar de la vista y el que jamás valor que desea configurarlo para.
Utilice LayoutParams. Si está utilizando un LinearLayout que tiene que importar android.widget.LinearLayout.LayoutParams, de lo contrario importar la versión correcta de LayoutParams para el diseño que está utilizando, o causará un ClassCastException, entonces:
LayoutParams layoutParams=new LayoutParams(int width, int height);
layoutParams.setMargins(int left, int top, int right, int bottom);
imageView.setLayoutParams(layoutParams);
NB: tenga en cuenta que también puede usar imageView.setLeft (int dim), PERO ESTO NO establecerá la posición del componente, solo establecerá la posición del borde izquierdo del componente, el resto permanecerá en misma posición.
entonces, ¿cómo podemos movernos? la vista a una posición específica sin afectar la vista original? – james
No estoy seguro de haber entendido su problema porque si desea mover una vista la cambiará por el hecho de que la está moviendo. De todos modos, si desea mover una vista sobre otra independientemente de ella, es posible que necesite una vista FrameLayout para deslumbrar su diseño principal y, dentro de ella, puede colocar sus vistas independientes (obviamente, si desea que se mueva debajo de su vista principal, tiene que colocar el FrameLayout antes que el principal) –
Para el apoyo a todos los niveles de la API se puede utilizar it así:
ViewPropertyAnimator.animate(view).translationYBy(-yourY).translationXBy(-yourX).setDuration(0);
Hay diferentes respuestas válidas ya, pero ninguno parece sugerir adecuadamente qué método (s) para usar en este caso, con la excepción de las correspondientes restricciones de nivel API:
Si puede esperar para un ciclo de diseño y el grupo de vista padre apoya
MarginLayoutParams
(o una subclase), establecidomarginLeft
/marginTop
alojamiento rdingly.Si necesita cambiar la posición de forma inmediata y persistente (por ejemplo, para un ancla PopupMenu), adicionalmente llame al
layout(l, t, r, b)
con las mismas coordenadas. Esto reemplaza lo que el sistema de disposición confirmará más adelante.Para cambios inmediatos (temporales) (tales como animaciones), utilice
setX()
/setY()
lugar. En los casos en que el tamaño principal no dependa de WRAP_CHILDREN, podría estar bien utilizarsetX()
/setY()
exclusivamente.Nunca uso
setLeft()
/setRight()
/setBottom()
/setTop()
, véase más adelante.
Antecedentes: Los campos mLeft
/mTop
/mBottom
/mRight
se llenan de los LayoutParams correspondientes en la disposición(). El sistema de vista de Android llama implícita y asíncronamente al diseño. Por lo tanto, configurar MarginLayoutParams
parece ser la forma más segura y limpia de establecer la posición de forma permanente. Sin embargo, el retraso de diseño asíncrono podría ser un problema en algunos casos, p. cuando se usa una Vista para renderizar un cursor, y se supone que debe reubicarse y servir como un ancla PopupMenu al mismo tiempo. En este caso, llamar al layout()
funcionó bien para mí.
Los problemas con setLeft()
y setTop()
son:
Llamándolos por sí sola no es suficiente - que también tienen que llamar
setRight()
ysetBottom()
para evitar el estiramiento o encogimiento de la vista.La aplicación de estos métodos se ve relativamente complejo (= haciendo un trabajo para dar cuenta de la vista cambia de tamaño causados por cada uno de ellos)
Ellos parecen causar problemas extraños con campos de entrada: EditText soft numeric keyboard sometimes does not allow digits
setX()
y setY()
trabajan fuera del sistema de disposición, y los valores correspondientes se tratan como un desplazamiento adicional a los valores izquierdo/superior/inferior/derecho determinados por el sistema de disposición, desplazando la vista en consecuencia. Parece que se han agregado para animaciones (donde se requiere un efecto inmediato sin pasar por un ciclo de diseño).
Hola Stefan. ¿Podría aconsejarnos algunos libros o artículos donde puedo entender cómo funciona el sistema de diseño de Android? Entiendo esa secuencia de llamadas a layout() onMeasure() onDraw(), pero quiero conocer más detalles. Gracias de antemano –
Lamentablemente no puedo - la mejor y más definitiva referencia parece ser el código fuente real de Android O :) –
- 1. Establecer la posición absoluta de una vista
- 2. Establecer posición dinámicamente con jquery
- 3. Android - cambiar dinámicamente la posición de un imageview
- 4. Android: cambie la posición absoluta de una vista mediante programación
- 5. establecer fuente de ImageView dinámicamente android
- 6. ¿Cómo puedo establecer la posición de desplazamiento de un UIScrollView?
- 7. Vista de lista de Android establecer la posición predeterminada sin animación
- 8. ¿Cómo establecer dinámicamente los parámetros de diseño en Android?
- 9. Android gire imageview, no puedo establecer la posición final de imageview en onAnimationEnd()
- 10. ¿Cómo puedo animar una vista en Android y mantenerla en la nueva posición/tamaño?
- 11. Cómo establecer el borde para la vista web de Android
- 12. ¿Puedo establecer dinámicamente tabindex en JavaScript?
- 13. Cómo establecer la posición de desplazamiento en la parte superior de una vista de lista
- 14. ¿Cómo establecer la posición en el giro?
- 15. marcador de posición de diseño de Android para vista añadida dinámicamente
- 16. cómo mantener la posición de la barra de desplazamiento en la vista de lista de Android?
- 17. Android TableRow - ¿Cómo agregar View dinámicamente a cierta posición?
- 18. cómo establecer la posición de desplazamiento en uiwebview
- 19. Cómo configurar dinámicamente la altura de la vista de texto android
- 20. Establecer la posición de desplazamiento
- 21. ¿Cómo establecer la posición del diálogo?
- 22. Cómo establecer la posición del cursor en UITextView
- 23. ¿Agregar vista a un fragmento dinámicamente en Android?
- 24. Cómo establecer la posición de la curva en GWT RichTextArea
- 25. Cómo establecer/eliminar atributos dinámicamente en C#?
- 26. ImageView y establecer posición
- 27. Cómo establecer la posición superior usando jquery
- 28. ¿Cómo cargar marcadores dinámicamente para la posición actual en Android google-maps?
- 29. ¿Cómo obtener la vista de un elemento en la vista de lista en Android?
- 30. ¿Cómo puedo crear dinámicamente una preferencia de Android?
de ViewGroup desde los documentos de setTop() http://developer.android.com/reference/android/view/View.html#setTop%28int%29: 'establece la posición superior de esta vista en relación con su padre Este método debe ser llamado por el sistema de diseño y, en general, no se debe llamar porque la propiedad puede cambiarse en cualquier momento por el diseño. - entonces tal vez esa no sea una buena idea;) – katzenhut