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?

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> 

  • Android Instrumentación Botón HOME
  • Cómo aumentar la velocidad de rotación en android?
  • Rotar correctamente las imágenes web utilizando Picasso de Square
  • ImageView volverá al estado original después de girar?
  • Rotar una superficie de la cámaraVer a retrato
  • Comprensión adicional setRetainInstance (true)
  • Cómo evitar que toda la pantalla de actividad de rotación en android
  • RotateAnimation sin duración
  • EditText duplicado en rotación
  • Android 1.6 Rotación de la cámara?
  • Cómo hacer menú giratorio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.