代码之家  ›  专栏  ›  技术社区  ›  Felix

捕捉元素/条件布局

  •  1
  • Felix  · 技术社区  · 15 年前

    对不起,这个标题太差了,我不知道该怎么称呼这个问题。我要做的是:有一个 RelativeLayout 有两个孩子:

    1. 一带 layout_centerInParent="true"
    2. 一带 layout_alignParentBottom="true"

    但是,当设备处于横向模式时,元素(1)会略微出现 结束 在下面 元素(2)。但是,元素(1)上面有足够的空间显示 在上面 元素(2)。如果屏幕太小,无法使元素(1)居中,如何进行布局并使两个元素都居中 重叠,然后对齐元素(1) 在上面 (如 layout_above )元素(2)?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Joe    15 年前

    这应该可以为您提供一个布局, text1 项填充上面的可用空间 text2 ,并且在该空间中垂直和水平居中;以及 课文2 位于底部,水平居中。

    <LinearLayout 
        android:orientation="vertical"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent">
    
        <TextView
            android:id="@android:id/text1" 
            android:layout_width="fill_parent" 
            android:layout_height="0dp" 
            android:layout_weight="1" 
            android:text="Centered" 
            android:gravity="center_vertical|center_horizontal"
            />
    
        <TextView
            android:id="@android:id/text2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Bottom"
            android:gravity="center_horizontal"
            />
    </LinearLayout>
    

    重要的部分是 android:layout_weight ,结合 android:gravity .

        2
  •  1
  •   Jim Blackler    15 年前

    好的,这里有一个LeftField建议,如果您的元素(1)不太占用资源,它可能会起作用。

    元素(1)有两个版本,第一个版本 layout_centerInParent="true" 第二个是 layout_above="@id\element2" . 将两者都默认为 android:visibility="invisible" . 在onCreate post中,有一个可运行文件,用于检查两个元素和集合的Y维 View.VISIBLE 在具有最小值的元素上。

        3
  •  1
  •   Steve Haley    15 年前

    新理念:

    这是另一种解决方法,因为它不太优雅,但很简单。将元素(1)放入其自己的<linearlayout>配置,如下所示:

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" // More on this line below
        android:layout_alignParentTop="true"
        android:layout_above="@id/element2"
        android:gravity="center">
    

    线性布局将始终从屏幕顶部延伸到元素(2)的正上方,并且由于其重力为“中心”,元素(1)将始终位于可供其使用的任何空间的中间。注:行 android:layout_height="..." 是必需的,但实际上似乎什么都不做。无论是填充父级还是包装内容,其高度都由将其顶部固定到父级顶部和底部固定到元素(2)的行覆盖。但是,没有行会导致它崩溃,并出现运行时异常。


    原创,不太好的想法:

    另一个不太理想的解决方案是使用两个布局文件。将纵向布局XML放在布局文件夹中,将横向布局放在名为layout land的新文件夹中。然后,Android会根据手机的方向自动选择正确的手机。我想你可以用 layout-port 但是把画像放进去 layout 确保它知道默认情况下要使用哪个。