Android - 當LinearLayout的orientation="horizontal",內容元素的layout_gravity的(right,center,left)無作用

摘要: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"

 

原本我都不知道這些觀念的,被一問之下,突然全通了。