Ich habe mehrere verschachtelte Layouts, die ich bei Bedarf im Code um 90 Grad drehen möchte. Ich habe das SetRotation Teil der Dinge funktioniert gut, aber leider sind die Dinge nicht ganz richtig mit der Rotation. Die Breite dieser Elemente wird auf "Match_parent" festgelegt. Nach der Drehung entspricht sie immer noch der übergeordneten Breite und nicht der übergeordneten Höhe, auf die sie passen soll.Wie match_parent in einem linearLayout nach der Verwendung von setRotation aktualisieren?
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>
Rotation Java-Code
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 zeigt das Bild vor der Rotation auftritt.
This picture zeigt das Bild nach der Rotation.
Wie Sie sehen können, wurde die gesamte Box gedreht, nachdem die Höhe und Breite bereits festgelegt wurden. In der nicht gedrehten Version sollte die Breite (match_parent) Vollbild sein und die Höhe (layout_weight = 2) sollte 2/3 des Bildschirms sein. Das funktioniert gut. Das Problem besteht darin, dass nach dem Drehen diese Größen gleich bleiben, anstatt sich an die neue Rotation anzupassen und zu ändern.
Ich warf einige helle Hintergrundfarben ein, um bei der Fehlersuche zu helfen. Das Pink, das Sie sehen, befindet sich im Haupt-LinearLayout, nicht in einem der Layouts, die gedreht werden.
Ich habe versucht, die Rotation in der XML selbst, anstatt innerhalb des Codes, und bekam genau die gleichen Ergebnisse wie die After-Bild, so ist es klar, etwas verstehe ich nicht, wie man die Layoutbreiten den Weg bekommen Ich will. Kann ich Layout_weight nicht effektiv mit Rotation verwenden?
Für was es wert ich nie tat dies lösen.Ich habe am Ende separate XML-Dateien für mit und ohne Rotation erstellt und eine benutzerdefinierte VerticalTextView wie vorgeschlagen [http://stackoverflow.com/questions/1258275/vertical-rotated-label-in-android] verwendet, um meinen Text zu erhalten rotieren. Funktioniert wie ein Zauber, auch wenn die mehreren XML-Dateien ein wenig klobiger sind als eine einfache Rotation gewesen wäre. –
Ich habe (noch) keine schöne Antwort, aber ich denke, dass dies erreicht werden kann, indem man die Dimensionen der Eltern der Ansicht erhält und die Abmessungen der Ansicht anpasst. B. "int width = ((View) myView.getParent()). GetWidth();', 'myView.setLayoutParams (neue FrameLayout.LayoutParams (width, height));'. Ich habe einige Probleme mit der Position, aber ich denke, dass ich diese mit einer Kombination von 'setPivotX()' und 'setX()' überwinden kann. – VinceFior
Vertauschen Sie die Höhen- und Gewichtswerte der Layout-Parameter und setzen Sie die Layout-Parameter der Ansicht zurück, wenn Sie sie drehen. –