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> 

  • Rotar la vista de anuncio con API 8
  • Comprensión adicional setRetainInstance (true)
  • Cuando giro la imagen a 45 grados de superposición que sale de los límites en android
  • Después de girar una línea lineal, los eventos onclick no cambian de posición después de la rotación
  • Cómo rotar un dibujable por ObjectAnimator?
  • La orientación del grabador de vídeo JavaCV no es adecuada en modo retrato
  • Gire ImageView en Android en un punto fijo con RotateAnimation
  • Android - ¿Cómo diseñar un tipo de diseño de Rotary Dialer / Rotary Dialer?
  • Androide ImageView una rotación de dedo
  • Phonegap / HTML5 y la pantalla de Android redimensionan el problema en rotación de paisaje a retrato
  • ¿Por qué querría alguna vez `setRetainInstance (false)`? - O - La forma correcta de manejar la rotación del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.