2013-01-04 60 views
6

爲什麼這不會將視圖中的內容居中?垂直對齊重力不響應

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:layout_gravity="center_vertical" 
    tools:context=".MainActivity"> 

    <EditText 
     android:id="@+id/messageTextField" 
     android:layout_weight="1" 
     android:inputType="number" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:hint="@string/messageTextFieldPlaceholder" 
    /> 
    <Button 
     android:id="@+id/sendButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/sendButtonTitle" 
     android:onClick="sendMessage" 
    /> 

</LinearLayout> 

我看到了有關垂直對齊的幾個SO線程,我也看到了this,但我只有一個水平的LinearLayout,因此設置重力將調整從側面視圖到另一邊。

由於LinearLayout具有父級的維度,它是否不填滿整個屏幕?

不應該android:layout_gravity="center_vertical"調整它的維度中心(垂直)的子視圖嗎?

這對我來說對我來說是有意義的,因爲我已經完成了編碼,那爲什麼android沒有意義?

我是否需要另一個垂直的LinearLayout,它包含其中的所有其他內容,並使用android:layout_gravity="center_vertical"

回答

9

layout_gravity
標準重力常數,一個孩子可以提供給 其父。

gravity
指定如何將對象的內容,既 對x軸和y軸放置,對象本身內。

所以,如果你想讓你的內容垂直居中,你需要gravity而不是layout_gravity

+0

好。因此,layout_gravity是用於內容的,因爲它會傳達給它的佈局,重力會影響佈局,因爲它會調整它的內容,對吧? – RileyE

+0

是的。 'layout_gravity' - >孩子到父母,'重力' - >父母給孩子。 – Ahmad

+1

太好了。謝謝! – RileyE

1

而不是使用android:layout_gravity="center_vertical"的,請使用android:gravity="center_vertical",它將工作... :)

+0

謝謝你的幫助。不過,我不得不與艾哈邁德一起解釋。 – RileyE