Android线性布局方向如何影响布局重力?

时间:2013-08-02 22:47:31

标签: android android-layout

我有LinearLayout(视频按钮容器)和图像按钮作为它的孩子。我希望该视频按钮正确对齐,所以我给了它layout_gravity="right"

<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="vertical"
    tools:context=".MainActivity" >

    <!-- VIDEO BUTTON CONTAINER -->
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="#000000"
        android:layout_gravity="top">

        <!-- VIDEO BUTTON -->
        <ImageButton
            android:id="@+id/button_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:background="?android:attr/selectableItemBackground"
            android:contentDescription="@string/desc"
            android:paddingBottom="@dimen/controls_button_padding"
            android:paddingTop="@dimen/controls_button_padding"
            android:src="@drawable/ic_action_video" />
    </LinearLayout>

    <!-- some FrameLayout and another LinearLayout -->
</LinearLayout>

它产生了这个:

enter image description here

我想要的是:

enter image description here

我通过将视频按钮容器的android:orientation="horizontal"更改为android:orientation="vertical"来实现这一点。 发生了什么?为什么它不适用于容器的水平方向?

2 个答案:

答案 0 :(得分:8)

如果容器是水平的,则应该按顺序从左到右堆叠元素。现在,如果是这种情况,它如何在保持原始前提的同时水平满足布局重力?

水平重力(右,左,中)将在垂直LinearLayout中工作,垂直重力(上,下)将在水平LinearLayout中工作。

答案 1 :(得分:2)

刚刚放

  

重力= “右”

进入水平线性布局,应该可以做到这一点:)

在我的情况下效果很好(只是基于你的布局的例子):

<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="vertical"
              tools:context=".MainActivity" >

    <!-- VIDEO BUTTON CONTAINER -->
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="#000000"
            android:gravity="right">

        <!-- VIDEO BUTTON -->
        <ImageButton
                android:id="@+id/button_video"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_margin="10dp"
                android:background="@android:color/background_light"/>
    </LinearLayout>

    <!-- some FrameLayout and another LinearLayout -->
</LinearLayout>

- 编辑 -

关于LinearLayout的方向:vertical和horizo​​ntal允许定义布局中的子项将以哪种方式水平或垂直放置在彼此旁边。

“重力”属性允许您控制布局的锚点,在您的情况下应该位于布局的右侧。