摘要:Android - 當LinearLayout的orientation="horizontal",內容元素的layout_gravity的(right,center,left)無作用
今天有一個學弟,問我一個問題
說他的LinearLayout裡的兩個ImageView,一個靠右,一個靠左,但卻沒有效果
如下程式碼
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="148dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/pic1"
android:layout_marginLeft="10dp"
android:layout_gravity="left"/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/pic1"
android:layout_marginRight="10dp"
android:layout_gravity="right"/>
</LinearLayout>
我就覺得很神奇,真的不行
後來查一下網路文章,
終於知道原因
http://stackoverflow.com/questions/18027223/how-android-linear-layout-orientation-affects-layout-gravity
說明如下:
If the container is horizontal, then it is supposed to stack elements from left to right in order. Now, if that's the case, how can it satisfy a layout gravity horizontally while keeping its original premise?
A horizontal gravity (right, left, center) will work in a vertical LinearLayout and a vertical gravity (top, bottom) will work in a horizontal LinearLayout.
當LinearLayout為horizontal,他的elements的 layout gravity 的水平功能是不work,他只 work在vertical
相反的
layout gravity vertical 只work在 horizontal
這時候,改寫法吧。
http://stackoverflow.com/questions/10355274/android-layout-left-and-right-align-in-horizontal-layout
還是改為RelativeLayout比較簡單
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageView1"
android:layout_width="148dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/pic1"
android:layout_marginLeft="10dp"
android:layout_alignParentLeft="true"/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/pic1"
android:layout_marginRight="10dp"
android:layout_alignParentRight="true"/>
</RelativeLayout>
題外話,
現在我才知道ImageView,如果你只想設單邊,另一邊則跟著寬或高,依比例變化
要記得設android:adjustViewBounds="true"
原本我都不知道這些觀念的,被一問之下,突然全通了。