2014-09-20 64 views
2

我有我的應用程序的某些部分的相對佈局,由一個複選框,一個按鈕,一些文本和另一個按鈕組成(請參見第一個截圖,例如:[5分鐘]屏幕關閉後[除外])。相對佈局中的按鈕被TextView推下屏幕

問題在於其他語言,最後一個按鈕左側的文本可能會更長,推動「除外」按鈕稍微或完全脫離屏幕。我還能怎麼做,以便按鈕(連同文本)繞回到下一行?現在只有文字。下面是代碼:

 <RelativeLayout 
     android:id="@+id/layout_after_time" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp"> 

     <Button 
      android:id="@+id/button_set_time_turn_off" 
      android:layout_width="wrap_content" 
      android:layout_height="35sp" 
      android:paddingTop="0dp" 
      android:paddingBottom="0dp" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_centerVertical="true" 
      android:textSize="16sp"/> 

     <TextView 
      android:id="@+id/textView_data_check_minutes" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="3dp" 
      android:layout_marginStart="3dp" 
      android:layout_toRightOf="@+id/button_set_time_turn_off" 
      android:layout_toEndOf="@+id/button_set_time_turn_off" 
      android:layout_centerVertical="true" 
      android:textSize="16sp" 
      android:textColor="@android:color/primary_text_dark" 
      android:text="@string/text_disable_after_time" /> 

     <Button 
      android:id="@+id/button_set_disable_exceptions" 
      android:layout_width="wrap_content" 
      android:layout_height="35sp" 
      android:paddingTop="0dp" 
      android:paddingBottom="0dp" 
      android:layout_toRightOf="@+id/textView_data_check_minutes" 
      android:layout_toEndOf="@+id/textView_data_check_minutes" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_centerVertical="true" 
      android:text="@string/button_disable_except" 
      android:textSize="16sp"/> 

    </RelativeLayout> 

Normal layout "except" button pushed off screen http://i60.tinypic.com/214zj3t.png

回答

0

您可以在LinearLayout包裝這些替代,因爲,畢竟,他們只是線性的。然後根據您的需求定位您需要的LinearLayout

這將允許您使用layout_weight這將確保每個View只佔用盡可能多的空間根據需要。你需要玩weights才能得到你想要的東西,但是像1 | 2 | 1這樣的東西看起來接近你想要的東西。

<LinearLayout 
    android:id="@+id/layout_after_time" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10dp"> 

    <Button 
     android:id="@+id/button_set_time_turn_off" 
     android:layout_width="0dp" 
     android:layout_height="35sp" 
     android:layout_weight="1" 
     android:paddingTop="0dp" 
     android:paddingBottom="0dp" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_gravity="center_vertical" 
     android:textSize="16sp"/> 

    <TextView 
     android:id="@+id/textView_data_check_minutes" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:layout_marginLeft="3dp" 
     android:layout_marginStart="3dp" 
     android:layout_gravity="center_vertical" 
     android:textSize="16sp" 
     android:textColor="@android:color/primary_text_dark" 
     android:text="@string/text_disable_after_time" /> 

    <Button 
     android:id="@+id/button_set_disable_exceptions" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="35sp" 
     android:paddingTop="0dp" 
     android:paddingBottom="0dp" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_gravity="center_vertical" 
     android:text="@string/button_disable_except" 
     android:textSize="16sp"/> 

</LinearLayout> 

注意,我做了width每個"0dp"的,因爲你使用weight的水平佈局時,通常都需要這一點。我還將android:layout_centerVertical="true"替換爲android:layout_gravity="center_vertical"以匹配LinearLayout的相應屬性。我還刪除了to_right_of以及LinearLayout不再需要的屬性。

我還沒有測試過,但這應該讓你關閉。

LinearLayout docs

另一個選擇可能是使用的TextViewmaxWidth財產。

+0

感謝您的建議@codeMagic。它並不完全符合我想要的,即將文本AND按鈕推到下一行,但它確實有效。 textView成爲多行,按鈕保持原位。我不得不使按鈕的重量0.00000001和textView 1的重量,否則按鈕被擠壓。我不確定爲什麼權重看起來落後。我會稍等一下,看看是否有人可以想出一種方法來處理文本,最後一個按鈕將換行到下一行,否則我會將其標記爲正確。 – Flyview 2014-09-20 13:06:28

+1

其實更好的是,我將內部textView的權重設置爲1,並且不對按鈕設置權重(默認值爲0),但在按鈕上使用wrap_content作爲寬度,並且它完美地工作! – Flyview 2015-04-17 17:12:23