Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿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?

  • Cómo servir un archivo en sdcard usando NanoHTTPD (dentro de Android)
  • ¿Podemos usar Android Studio para el desarrollo de AOSP?
  • ¿Cómo mostrar y ocultar las preferencias en Android dinámicamente?
  • Cambiar la configuración regional dentro de la propia aplicación
  • Reinicialización de tejido de Twitter después de tiempo de inactividad aplicación android
  • Cómo enviar el objeto json al servidor usando volley en andorid
  • ¿Cómo resolver el mensaje "Esperando el depurador"?
  • Asegurar la comunicación desde Android a un servicio web
  • Pegar texto en un nuevo emulador de Android
  • Cómo jugar radio en línea en android
  • ¿Cómo se puede activar la depuración de USB para Kindle Fire en Linux (Ubuntu)?
  • Los fragmentos de ViewPager no se recrean después de FragmentTransaction.replace () seguido por el botón de retroceso
  • 10 Solutions collect form web for “¿Cómo puedo establecer dinámicamente la posición de la vista en Android?”

    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), establezca marginLeft / 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 ser setX() usar setX() / 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() y setBottom() 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); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.