Ho diversi layout nidificati che sto cercando di ruotare di 90 gradi a richiesta nel codice. Ho la parte setRotation di cose che funzionano bene, ma sfortunatamente le cose non stanno ridimensionando abbastanza bene con la rotazione. La larghezza su questi elementi è impostata su match_parent e, dopo la rotazione, continua a far corrispondere la larghezza genitore, non l'altezza genitore a cui deve corrispondere.Come aggiornare match_parent in un linearLayout dopo aver usato setRotation?
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>
rotazione del codice 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
This picture mostra l'immagine prima che si verifichi la rotazione.
This picture mostra l'immagine dopo la rotazione.
Come si può vedere, l'intera casella è stata ruotata dopo che l'altezza e la larghezza sono già state impostate. Nella versione non ruotata la larghezza (match_parent) dovrebbe essere a schermo intero e l'altezza (layout_weight = 2) dovrebbe essere 2/3 dello schermo. Funziona bene. Il problema è dopo che ruota, quelle dimensioni rimangono le stesse invece di adattarsi e cambiare alla nuova rotazione.
Ho inserito alcuni colori di sfondo chiari per aiutare a risolvere il problema, che Rosa che stai vedendo si trova nel LinearLayout principale, non in nessuno dei layout che vengono ruotati.
Ho provato a includere la rotazione nello xml stesso, anziché all'interno del codice, e ho ottenuto gli stessi esatti risultati dell'immagine successiva, quindi è chiaramente qualcosa che non capisco su come ottenere le larghezze del layout nel modo in cui Voglio. Posso semplicemente non usare layout_weight in modo efficace con la rotazione?
Per quel che vale non ho mai fatto risolvere questo problema.Ho finito per creare file XML separati con e senza la rotazione e utilizzando un VerticalTextView personalizzato come suggerito [qui] (http://stackoverflow.com/questions/1258275/vertical-rotated-label-in-android) per ottenere il mio testo ruotare. Funziona come un fascino, anche se i file XML multipli sono un po 'più schifosi di quanto sarebbe stata una semplice rotazione. –
Non ho (ancora) una risposta carina, ma penso che questo possa essere ottenuto prendendo le dimensioni del genitore della vista e impostando le dimensioni della vista in modo che corrispondano. I.e., int width = ((Visualizza) myView.getParent()). GetWidth(); ',' myView.setLayoutParams (new FrameLayout.LayoutParams (larghezza, altezza)); '. Sto avendo alcuni problemi con la posizione, però, ma penso di poterli superare con alcune combinazioni di 'setPivotX()' e 'setX()'. – VinceFior
Scambia i valori di altezza e peso dei parametri di layout e ripristina i parametri di layout della vista quando lo ruoti. –