2016-10-02 81 views
1

假設我有兩個我希望垂直居中的視圖。第一個視圖比第二個視圖大。對於RelativeLayout和LinearLayout,android的行爲差異:gravity =「center_vertical」

我注意到,如果我將這兩個視圖放在RelativeLayout內,屬性爲layout_height="wrap_content"android:gravity="center_vertical"什麼也沒有發生。這就是我得到:

enter image description here

在相反的,如果我把與性能layout_height="wrap_content"android:gravity="center_vertical"一個LinearLayour內這兩種觀點的看法是垂直居中:

enter image description here

最後,如果我將這兩個視圖放在RelativeLayout的內部,並且屬性layout_height具有固定高度並且android:gravity="center_vertical"LinearLayout的結果相同。視圖垂直居中。

我期望視圖在每種情況下都垂直居中。你知道爲什麼有這種差異?

+0

的可能的複製[Android的相對佈局問題重力](http://stackoverflow.com/questions/2804411/android-relative-layout-problem-with-gravity) –

回答

1

LinearLayout根據其方向(水平或垂直)處理其所有子對象。所以當你說引力時:「center_vertical」。您實際上是基於您的父級佈局進行引用。

在RelativeLayout的情況下,它使您可以指定子對象相對於彼此(子B的左邊的子A)或父對象(與父對象頂部對齊)的位置。

我個人只能使用LinearLayouts重力和RelativeLayouts的centerInParent。

0

在您的第一個案例中,如果您使用android:layout_centerVertical="true"到您想居中的子視圖,它將按照您的預期與RelativeLayout一起使用。

因此,在LinearLayout的情況下,您需要先指定orientation(即水平/垂直),以便子視圖基於父佈局的引用進行充氣。

RelativeLayout中,正如名稱所說的那樣,您可以指定相對於作爲家長RelativeLayout的孩子的視圖的位置。

現在您想實現的視圖也可以通過許多其他方式生成。

例如,設定你的父母佈局LinearLayout。不要在父佈局中指定任何gravity屬性。因此,您將子項的layout_gravity屬性設置爲certer_vertical,這也應該起作用。

0

那麼,經過一些其他測試後,android:gravity對於RelativeLayout的行爲似乎有點隨機。我會避免使用。

相關問題