Tôi có một số bố trí lồng nhau mà tôi đang cố gắng xoay 90 độ theo yêu cầu trong mã. Tôi đã có một phần setRotation của những thứ làm việc tốt, nhưng tiếc là mọi thứ không thay đổi kích thước khá đúng với vòng quay. Chiều rộng trên các phần tử này được đặt thành match_parent và sau khi xoay nó vẫn khớp với chiều rộng gốc, không phải chiều cao gốc mà nó phải khớp.Làm cách nào để làm mới match_parent trong linearLayout sau khi sử dụng 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>
Rotation Java Mã
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 cho thấy hình ảnh trước khi luân chuyển xảy ra.
This picture hiển thị hình ảnh sau khi xoay vòng xảy ra.
Như bạn có thể thấy, toàn bộ hộp đã được xoay sau khi chiều cao và chiều rộng của nó đã được đặt. Trong phiên bản không được bảo vệ, chiều rộng (match_parent) phải ở chế độ toàn màn hình và chiều cao (layout_weight = 2) phải bằng 2/3 màn hình. Điều đó hoạt động tốt. Vấn đề là sau khi nó quay, những kích thước đó vẫn giữ nguyên thay vì thích ứng và thay đổi sang vòng quay mới.
Tôi đã ném một số màu nền sáng để giúp khắc phục sự cố, Màu hồng mà bạn đang nhìn thấy nằm trong LinearLayout chính, không nằm trong bất kỳ bố cục nào được xoay.
Tôi đã thử bao gồm xoay trong chính xml, thay vì bên trong mã và nhận được kết quả chính xác giống như hình sau, vì vậy rõ ràng điều gì đó tôi không hiểu về cách có chiều rộng bố cục theo cách Tôi muốn. Tôi có thể không sử dụng layout_weight một cách hiệu quả với luân phiên không?
Đối với những gì nó có giá trị Tôi chưa bao giờ giải quyết việc này.Tôi đã kết thúc việc tạo các tệp XML riêng biệt cho có và không có vòng xoay và sử dụng VerticalTextView tùy chỉnh như được đề xuất [ở đây] (http://stackoverflow.com/questions/1258275/vertical-rotated-label-in-android) để lấy văn bản của tôi để xoay. Làm việc như một sự quyến rũ, ngay cả khi các tập tin xml nhiều là một chút clunkier hơn một vòng quay đơn giản sẽ có được. –
Tôi chưa (có) có câu trả lời hay, nhưng tôi nghĩ điều này có thể đạt được bằng cách nhận được kích thước của cha mẹ của chế độ xem và đặt thứ nguyên của chế độ xem cho phù hợp. I.e., 'int width = ((Xem) myView.getParent()) getWidth();', 'myView.setLayoutParams (new FrameLayout.LayoutParams (chiều rộng, chiều cao));'. Tuy nhiên, tôi có một số vấn đề với vị trí, nhưng tôi nghĩ rằng tôi có thể vượt qua những vấn đề đó với một số kết hợp của 'setPivotX()' và 'setX()'. – VinceFior
Hoán đổi giá trị độ cao và trọng số của thông số bố cục và đặt lại thông số bố cục của chế độ xem khi bạn xoay. –