2012-03-19 55 views
5

我想要3個按鈕對齊(左,中,右)。我知道它可以用重力來完成,但我試圖理解這裏的layout_weight概念。我正在使用此代碼:爲什麼按鈕伸展覆蓋分配的所有layout_weight

<LinearLayout 
id=.. 
layout_width = "wrap_content" 
layout_height = "wrap_content" 
orientation="Horizonta" 
> 
<Button 
    id=1 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    layout_weight = "1" 
    text= "text" /> 

<Button 
    id=2 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    layout_weight = "1" 
    text= "text" /> 

<Button 
    id=3 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    layout_weight = "1" 
    text= "text" /> 
</LinearLayout> 

但是,我正在獲取下面圖像的頂部。哪個是對的。問題是爲什麼在我使用wrap_content的時候,按鈕被拉伸以覆蓋它所分配的所有區域?如何使它像BOTTOM圖像?

enter image description here

謝謝

+0

謝謝!我已經在這裏工作了兩個小時了! – 2016-03-10 00:52:01

回答

5

的layout_weight用於指示如何在屏幕上額外的自由空間應的小部件之間進行劃分。在這種情況下,我們有三個具有相同layout_weight的按鈕,因此按鈕的增長也會相同,直到所有可用空間都消失爲止。

必須嘗試其他方法來獲得原始大小的按鈕和我們想要的對齊(左 - 中 - 右)。一個問題是,當涉及尊重layout_gravity參數時,水平LinearLayout並不完全協作。我們將能夠使用影響垂直對齊的layout_gravity參數,但水平被父LinearLayout忽略,嘆息另一個死衚衕。

解決方案是在按鈕之間放置一些東西,將按鈕推到屏幕的正確位置。空間視圖是在API 14(冰淇淋三明治)中引入的,適合用於此目的。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <Space 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight = "1" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <Space 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight = "1" /> 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

空間視圖也可以替換爲幾個空的TextView以使設計在運行較早API級別的設備上工作。

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.0" 
    android:text="" />  
+0

完美的答案。謝謝 – Snake 2012-03-20 02:43:23

2

當使用重量,layout_width被中省略並且僅使用重量算法,然後拉伸元件。

1

您的按鈕填充空間,因爲您使用layout_weight="1",它告訴按鈕佔用額外的空間,同樣因爲layout_weight屬性爲1,所有按鈕將佔用相同的空間並具有相同的大小。您無法使用layout_weight獲取底部佈局,請使用layout_gravity來定位它們(​​這裏是關於此What does android:layout_weight mean?的另一個問題)。

如果你想波紋圖像試試這個:

<LinearLayout 
id=.. 
layout_width = "wrap_content" 
layout_height = "wrap_content" 
orientation="Horizonta" 
> 
<Button 
    id=1 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    android:layout_gravity="left" 
    text= "text" /> 

<Button 
    id=2 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    android:layout_gravity="center_horizontal" 
    text= "text" /> 

<Button 
    id=3 
    layout_width = "wrap_content" 
    layout_height = "wrap_content" 
    android:layout_gravity="right" 
    text= "text" /> 
</LinearLayout>