Cómo actualizar match_parent en un linearLayout después de usar setRotation?

Tengo varios diseños anidados que estoy intentando girar 90 grados en demanda en código. Tengo la parte setRotation de las cosas funcionando muy bien, pero lamentablemente las cosas no están cambiando de tamaño muy bien con la rotación. El ancho de estos elementos se establece en match_parent y, después de la rotación, sigue igualando el ancho de los padres, no la altura de los padres que debe coincidir.

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="link.basiclifecounter.LifeCounter" android:background="#CC00CC"> <LinearLayout android:id="@+id/topPlayers" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:orientation="vertical" android:background="#CC0000"> <RelativeLayout android:id="@+id/p3" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> **A bunch of stuff in here** </RelativeLayout> <RelativeLayout android:id="@+id/p2" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> **A bunch of stuff in here** </RelativeLayout> </LinearLayout> <LinearLayout android:id="@+id/bottomPlayer" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical" android:background="#00CC00"> <RelativeLayout android:id="@+id/p1" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> **A bunch of stuff in here** </RelativeLayout> </LinearLayout> </LinearLayout> 

Rotación del código Java

 view.findViewById(R.id.topPlayers).setRotation(90); //Rotate the entire top box view.findViewById(R.id.p3).setRotation(180); //Flip one side so both players face outwards 

Esta imagen muestra la imagen antes de que ocurra la rotación.

Esta imagen muestra la imagen después de la rotación.

Como se puede ver, la caja entera se ha girado después de su altura y el ancho ya están establecidos. En la versión sin rotar, la anchura (match_parent) debe ser pantalla completa y la altura (layout_weight = 2) debe ser 2 / 3rds de la pantalla. Eso funciona muy bien. El problema es después de que gira, esos tamaños permanecen iguales en vez de adaptarse y cambiar a la nueva rotación.

He lanzado algunos colores de fondo brillante para ayudar a solucionar problemas, que Rosa que está viendo es en el LinearLayout principal, no en cualquiera de los diseños que se giran.

Intenté incluir la rotación en el xml mismo, en lugar de dentro del código, y obtuve exactamente los mismos resultados que la imagen posterior, por lo que es claramente algo que no entiendo acerca de cómo obtener los anchos de diseño de la manera que quiero. ¿No puedo usar layout_weight de manera eficaz con la rotación?

One Solution collect form web for “Cómo actualizar match_parent en un linearLayout después de usar setRotation?”

Creo que usted está teniendo el mismo problema como se describe en esta pregunta de desbordamiento de pila . Parece que la rotación simplemente no se tiene en cuenta para propósitos de diseño. En otras palabras, la disposición ocurre entonces la rotación ocurre con las vistas como se dispuso antes de la rotación.

Esta respuesta a esa misma pregunta puede ayudarte.

También puede ajustar manualmente las mediciones. De cualquier manera es un poco desordenado, pero creo que es la forma en que es.


Puede cargar un diseño alternativo que se comportará como desee en lugar de realizar la rotación. (Consulte el diseño y la imagen a continuación.) También puede obtener el mismo resultado cambiando los parámetros de diseño mediante programación.

Aquí hay un proyecto en GitHub que demuestra hacer la rotación de forma programática. La vista gira después de una pausa de tres segundos.

Espero que usted encuentre esto útil.

Introduzca aquí la descripción de la imagen

Alternate.xml

  <LinearLayout android:id="@+id/topPlayers" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:background="#CC0000" android:orientation="horizontal"> <RelativeLayout android:id="@+id/p3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" android:rotation="90"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="p3" android:textSize="48sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/p2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#0000CC" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:rotation="-90" android:text="p2" android:textSize="48sp" /> </RelativeLayout> </LinearLayout> <LinearLayout android:id="@+id/bottomPlayer" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#00CC00" android:orientation="vertical"> <RelativeLayout android:id="@+id/p1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="p1" android:textSize="48sp" /> </RelativeLayout> </LinearLayout> 

  • Fragmentos desaparecen cuando se rotan
  • Zoom de Android y rotación de la vista de imagen
  • Detectar algoritmo de giro de 360 ​​grados
  • Imagen giratoria. Animación de la lista o rotación animada? (Androide)
  • La música se detiene cuando la pantalla gira utilizando MediaPlayer en Android
  • Cómo rotar un dibujable por ObjectAnimator?
  • Android: gira todo el diseño
  • DialogFragment en Fragmento con rotación de pantalla
  • Comprensión del uso de ImageView Matrix
  • Cómo girar el botón de acción flotante sin girar la sombra?
  • Android girar imageview, no puedo establecer la posición final de imageview en onAnimationEnd ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.