¿Cómo puedo establecer dinámicamente la posición de la vista en Android?
¿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?
- Error al inflarse al extender una clase
- ¿Por qué la vista personalizada no invalida?
- Android: superposición en la ventana sobre las actividades de una tarea
- Método recomendado para presentar texto con formato en Android?
- En Android: ¿Cómo definir la animación adecuada para maximizar una vista mientras se minimizan otros 2 al mismo tiempo?
- Error de IndexOutOfBoundsException de Android para la vista de lista de filtros de búsqueda
- ¿Cómo puedo pasar variables extra durante una búsqueda invocada por un SearchView / Widget?
- Convertir vista a mapa de bits en Android
- View.onMeasure () no se llama
- Android Color de fondo cambiado al azar
- Reseting el color de fondo de una vista
- Ver paginador androide con imagen de fondo único
- Margen de visión establecido para Android por programación
Para cualquier cosa debajo de Honeycomb (API Level 11) tendrás que usar setLayoutParams(...)
.
Si puede limitar su compatibilidad con Honeycomb y subir, puede utilizar setX(...)
, setY(...)
, setLeft(...)
, setTop(...)
, etc.
Sí, puede establecer dinámicamente la posición de la 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
acuerdo con el diseño tomado en su archivo xml.Hay diferentes LayoutParams
acuerdo al diseño tomado.
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 le sea de ayuda establecer la posición.
Hay una biblioteca llamada NineOldAndroids , que le permite utilizar la biblioteca de animación Honeycomb todo el camino hasta la versión uno.
Esto significa que usted puede definir izquierda, derecha, translationX / Y con una interfaz ligeramente diferente.
Así es como funciona:
ViewHelper.setTranslationX(view, 50f);
Simplemente utilice los métodos estáticos de la clase ViewHelper, pase la vista y el valor que desea establecer.
Recomendaría usar setTranslationX
y setTranslationY
. Yo sólo estoy empezando en esto yo mismo, pero estos parecen ser la manera más segura y preferida de mover una vista. Supongo que depende mucho de lo que estás tratando de hacer, pero esto está funcionando bien para mí para la animación 2D.
Ya existen varias respuestas válidas, pero ninguna parece sugerir adecuadamente qué método utilizar, en cuyo caso, a excepción de las restricciones de nivel de API correspondientes:
-
Si puede esperar un ciclo de diseño y el grupo de vista principal admite
MarginLayoutParams
(o una subclase), establezcamarginLeft
/marginTop
consecuencia. -
Si necesita cambiar la posición de forma inmediata y persistente (por ejemplo, para un ancla de PopupMenu), además, llame al
layout(l, t, r, b)
con las mismas coordenadas. Esto previene lo que el sistema de disposición confirmará más tarde. -
Para cambios inmediatos (temporales) (como animaciones), utilice
setX()
/setY()
. En los casos en que el tamaño del padre no depende de WRAP_CHILDREN, puede sersetX()
usarsetX()
/setY()
. -
Nunca utilice
setLeft()
/setRight()
/setBottom()
/setTop()
, ver más abajo.
Antecedentes : Los mLeft
/ mTop
/ mBottom
/ mRight
se llenan de los LayoutParams correspondientes en layout (). Layout es llamado implícita y asincrónicamente por el sistema de diseño de vista de Android. Por lo tanto, establecer el MarginLayoutParams
parece ser la forma más segura y más limpia para establecer la posición de forma permanente. Sin embargo, el retraso de diseño asincrónico puede ser un problema en algunos casos, por ejemplo, cuando se utiliza una vista para representar un cursor, y se supone que se vuelve a colocar y servir como un anclaje PopupMenu al mismo tiempo. En este caso, el layout()
llamada layout()
funcionó bien para mí.
Los problemas con setLeft()
y setTop()
son:
-
Llamarlos solo no es suficiente – también necesita llamar a
setRight()
ysetBottom()
para evitar que se estire o se contraiga la vista. -
La implementación de estos métodos parece relativamente compleja (= haciendo algún trabajo para tener en cuenta los cambios de tamaño de vista causados por cada uno de ellos)
-
Parecen causar problemas extraños con los campos de entrada: EditText teclado numérico suave a veces no permite dígitos
setX()
y setY()
trabajan fuera del sistema de disposición, y los valores correspondientes se tratan como un desplazamiento adicional a los valores de izquierda / superior / inferior / derecha determinados por el sistema de disposición, cambiando la vista en consecuencia. Parecen haber sido agregados para las animaciones (donde un efecto inmediato sin pasar por un ciclo de disposición se requiere).
Puede probar a 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 x visual 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. 🙂
Establezca la posición izquierda de esta vista en relación con su padre:
view.setLeft(int leftPosition);
Establezca la posición correcta de esta vista en relación con su padre:
view.setRight(int rightPosition);
Establezca la posición superior de esta vista en relación con su origen:
view.setTop(int topPosition);
Establezca la posición inferior de esta vista en relación con su origen:
view.setBottom(int bottomPositon);
Los métodos anteriores se utilizan para establecer la posición de la vista relacionada con su padre.
Utilice LayoutParams. Si está utilizando LinearLayout, tiene que importar android.widget.LinearLayout.LayoutParams, si no importa la versión adecuada de LayoutParams para el diseño que está utilizando, o causará una ClassCastException , entonces:
LayoutParams layoutParams=new LayoutParams(int width, int height); layoutParams.setMargins(int left, int top, int right, int bottom); imageView.setLayoutParams(layoutParams);
Nota: tenga en cuenta que puede utilizar también 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 la misma posición.
Use RelativeLayout
, coloque su vista en ella, obtenga el objeto RelativeLayout.LayoutParams
desde su vista y establezca los márgenes según sus necesidades. Luego llama a requestLayout()
en tu vista. Esta es la única manera que conozco.
Para obtener soporte para todos los niveles de API, puede utilizarlo de esta manera:
ViewPropertyAnimator.animate(view).translationYBy(-yourY).translationXBy(-yourX).setDuration(0);
- ¿Es posible agregar una matriz u objeto a SharedPreferences en Android?
- Android – Cómo configurar la barra de calificación no se puede hacer clic y se puede tocar en HTC móvil