7

我有幾個嵌套的佈局,我試圖在代碼中按需旋轉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進行有效的旋轉嗎?

+0

對於什麼是值得我從來沒有解決這個問題。我最終創建了單獨的XML文件,用於旋轉和不旋轉,並使用自定義的VerticalTextView [建議](http://stackoverflow.com/questions/1258275/vertical-rotated-label-in-android)來獲取我的文本旋轉。像魅力一樣工作,即使多個xml文件比簡單的旋轉稍微笨拙一些。 –

+0

我還沒有(還)有一個漂亮的答案,但我認爲這可以通過獲取視圖的父級的維度並設置視圖的維度匹配來實現。 I.e.,'int width =((View)myView.getParent())。getWidth();','myView.setLayoutParams(new FrameLayout.LayoutParams(width,height));'。不過,我在這個位置上遇到了一些問題,但我想我可以用'setPivotX()'和'setX()'的組合來克服這些問題。 – VinceFior

+0

交換佈局參數的高度和重量值,並在旋轉視圖時重置視圖的佈局參數。 –

回答

1

我認爲你的問題與Stack Overflow question中概述的相同。爲了佈局的目的,似乎不考慮輪換。換句話說,佈局發生,然後旋轉發生在旋轉之前佈置的視圖。

answer對同一個問題可能會幫助你。

您也可以手動調整測量值。無論哪種方式都有點混亂,但我認爲這是它的方式。


您可以加載一個替代佈局,其行爲將按照您的意願而不是旋轉。 (請參見下面的佈局和圖像。)通過編程更改佈局參數也可以獲得相同的結果。

這是一個project on GitHub,演示了以編程方式進行旋轉。視圖在暫停三秒後旋轉。

我希望你覺得這個很有用。

enter image description here

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> 

相關問題