如何使用LinearLayout定位Button死点

时间:2015-08-02 09:26:20

标签: android button android-linearlayout center

我正在设置我的Buttons,它位于TextView下面,是屏幕的死角 目前,我只将它们作为水平中心,而不是垂直中心,因此按钮位于TextView下方,这不是我想要的。
我甚至尝试过使用layout_gravity而不是引力,但仍然没有运气。

这是我得到的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView android:text="CALCULATOR"
    android:id="@+id/appTitle"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:gravity="center"
    android:orientation="vertical" >

<Button android:text="BASIC MATH"
    android:id="@+id/basicMath"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />

<Button android:text="BASIC ALGEBRA"
    android:id="@+id/alg"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />

<Button android:text="BASIC CALCULUS"
    android:id="@+id/calc"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />

<Button android:text="INFO"
    android:id="@+id/info"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />
    </LinearLayout>

3 个答案:

答案 0 :(得分:2)

我真的不能忍受嵌套布局,抱歉 因此我真的不得不提出替代方案。

<RelativeLayout
    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"
    tools:context=".MainActivity"
    >
    <TextView
        android:text="CALCULATOR"
        android:id="@+id/appTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
    />
    <!-- All you need is a little trick -->
    <!-- This dummy View is invisible, but it's CENTERED -->
    <!-- The 4 Buttons will be positioned in RELATION to this one -->
    <!-- This is the power of RelativeLayouts -->
    <View
        android:id="@+id/vwDummy"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_centerInParent"true"
    />
    <!-- These 2 are horizontally centered and go above the dummy -->
    <Button
        android:text="BASIC ALGEBRA"
        android:id="@+id/alg"
        android:layout_above="@id/vwDummy"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
    />
    <Button
        android:text="BASIC MATH"
        android:id="@+id/basicMath"
        android:layout_above="@id/alg"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
    />
    <!-- These 2 are horizontally centered and go below the dummy -->
    <Button
        android:text="BASIC CALCULUS"
        android:id="@+id/calc"
        android:layout_below="@id/vwDummy"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
    />
    <Button
        android:text="INFO"
        android:id="@+id/info"
        android:layout_below="@id/calc"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
    />
</RelativeLayout>

如评论中所示,我利用了RelativeLayout孩子的相对性
你所需要的只是一个小技巧:

  • 在中心创建一个不可见的虚拟视图。
  • 将关系中的4个按钮与此对齐。

答案 1 :(得分:1)

按如下方式更新布局: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".MainActivity">

<TextView android:text="CALCULATOR"
android:id="@+id/appTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
/>

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
 >

<Button android:text="BASIC MATH"
    android:id="@+id/basicMath"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />

<Button android:text="BASIC ALGEBRA"
    android:id="@+id/alg"
    android:layout_below="@+id/basicMath"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />

<Button android:text="BASIC CALCULUS"
    android:id="@+id/calc"
    android:layout_below="@+id/alg"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />

<Button android:text="INFO"
    android:id="@+id/info"
    android:layout_below="@+id/calc"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center"
    />
</RelativeLayout></RelativeLayout>

答案 2 :(得分:1)

您可以将RelativeLayout用作父级,并将android:layout_centerInParent="true"添加到包含按钮的LinearLayout。此外,LinearLayout的宽度和高度应设置为wrap_content

您可以获得以下结果:

enter image description here

使用了以下xml:

<RelativeLayout 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">

    <TextView android:text="CALCULATOR"
        android:id="@+id/appTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_centerInParent="true">

        <Button android:text="BASIC MATH"
            android:id="@+id/basicMath"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />

        <Button android:text="BASIC ALGEBRA"
            android:id="@+id/alg"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />

        <Button android:text="BASIC CALCULUS"
            android:id="@+id/calc"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />

        <Button android:text="INFO"
            android:id="@+id/info"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
</RelativeLayout>

最后的建议: 使用LinearLayout match_parent代替fill_parent,因为自API 8以来已弃用