我有幾個嵌套的佈局,我試圖在代碼中按需旋轉90度。我已經將setRotation的一部分工作得很好,但不幸的是,事情並沒有隨着輪換而調整。這些元素的寬度設置爲match_parent,並且在旋轉之後它仍然匹配父寬度,而不是它應該匹配的父高度。如何在使用setRotation之後在linearLayout中刷新match_parent?
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>
旋轉的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顯示旋轉發生之前的圖像。
This picture顯示旋轉發生後的圖像。
正如你所看到的,整個盒子已經在高度和寬度已經設置好後旋轉了。在未旋轉的版本中,寬度(match_parent)應該是全屏,高度(layout_weight = 2)應該是屏幕的2/3。這工作得很好。問題在於它旋轉後,這些尺寸保持不變,而不是適應並更改爲新的旋轉。
我投入了一些明亮的背景顏色來幫助排除故障,您看到的Pink在主LinearLayout中,而不是在任何旋轉的佈局中。
我曾嘗試在xml本身而不是在代碼中使用旋轉,並且得到了與後面的圖片完全相同的結果,所以很明顯,我不明白如何獲得佈局寬度的方式我想要。我可以不使用layout_weight進行有效的旋轉嗎?
對於什麼是值得我從來沒有解決這個問題。我最終創建了單獨的XML文件,用於旋轉和不旋轉,並使用自定義的VerticalTextView [建議](http://stackoverflow.com/questions/1258275/vertical-rotated-label-in-android)來獲取我的文本旋轉。像魅力一樣工作,即使多個xml文件比簡單的旋轉稍微笨拙一些。 –
我還沒有(還)有一個漂亮的答案,但我認爲這可以通過獲取視圖的父級的維度並設置視圖的維度匹配來實現。 I.e.,'int width =((View)myView.getParent())。getWidth();','myView.setLayoutParams(new FrameLayout.LayoutParams(width,height));'。不過,我在這個位置上遇到了一些問題,但我想我可以用'setPivotX()'和'setX()'的組合來克服這些問題。 – VinceFior
交換佈局參數的高度和重量值,並在旋轉視圖時重置視圖的佈局參數。 –