LinearLayout 中的中心按钮
Center button in a LinearLayout
我只想居中 "CenterButton"(根 LinearLayout 的中心)但 Android 不合作..
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:layout_weight="0.00"
android:padding="5dp"
android:background="#zegerg"
android:id="@+id/LinearLayout1">
<ImageView
android:id="@+id/ImageView1"
android:layout_height="match_parent"
android:layout_width="151dp"
android:src="@mipmap/image_1"
android:contentDescription="@string/abcdef"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/CenterButton"
android:layout_gravity="center_horizontal|center_vertical|center"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text !"
android:id="@+id/TextView"
android:paddingBottom="30dp"
android:textColor="#37a52c" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ProgressBar"
android:paddingBottom="30dp"
android:progressTint="#37a52c" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_text"
android:id="@+id/Button2"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</LinearLayout>
尝试将其放在 XML 的末尾,但不起作用,因为其他元素将其推到一边。不太确定发生了什么。
给最上面的线性布局中的三个children设置重力为1,宽度为0。
您可以将 weight 用于子项的此类目的。将 layout_width 设为 0dp 并设置 layout_weight 为1.
如果您想让所有三个第一级子级都位于相同大小的列中,则需要向所有这些子级添加以下属性:
android:layout_width="0dp"
android:layout_weight="1"
(不要忘记宽度参数的尺寸 "dp",否则 IDE 会报错)。
...
<ImageView
android:id="@+id/ImageView1"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:src="@mipmap/image_1"
android:contentDescription="@string/abcdef"/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/CenterButton"
android:layout_gravity="center_horizontal|center_vertical|center"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:padding="20dp">
....
已编辑:
如果您希望您的 CenterButton 与所有其他视图重叠,那么您要做的是:
- 将所有内容包装在高度等于 200dp 的相对布局中,作为其第一个子项
- 从当前位置移除按钮 CenterButton 并将其添加到所有内容的底部,仍在相对布局内,但在线性布局下方
- 将这些属性添加到按钮,使其在父按钮中居中
android:layout_centerInParent="true"
所以最后你会有这样的东西(我已经改变了一些资源):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:layout_weight="0.00"
android:padding="5dp"
android:background="@android:color/holo_orange_dark"
android:id="@+id/LinearLayout1">
<ImageView
android:id="@+id/ImageView1"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:src="@drawable/plus"
android:contentDescription="abcdef"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text !"
android:id="@+id/TextView"
android:paddingBottom="30dp"
android:textColor="#37a52c" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ProgressBar"
android:paddingBottom="30dp"
android:progressTint="#37a52c" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:id="@+id/Button2"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button"
android:id="@+id/CenterButton"
android:layout_gravity="center_horizontal|center_vertical|center"/>
</RelativeLayout>
不清楚你的问题到底是什么。但是,这里有一些一般注意事项:
- 要使 RelativeView 中的视图或布局居中,请使用 layout_centerInParent="true"
- 要在其他布局之上创建布局,请使用 FrameLayout
- xml 文件中 views/layouts 的顺序很重要。您最后写的那个将在顶部(在我们的示例中:FrameLayout 或只是 CenterButton 应该写在 xml 文件中的其他视图和布局之后)
- 要在 LinearLayout 中分配可用的 space,请使用 android:layout_weight="1" (根据需要修改数值)
你可以试试这个例子:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="200dp">
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#fff"
android:orientation="horizontal"
android:padding="5dp">
<ImageView
android:id="@+id/ImageView1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:src="@mipmap/ic_launcher" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical">
<TextView
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="30dp"
android:text="Text !"
android:textColor="#37a52c" />
<ProgressBar
android:id="@+id/ProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="30dp"
android:progressTint="#37a52c" />
<Button
android:id="@+id/Button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text_text" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<Button
android:id="@+id/CenterButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical|center"
android:text="Button" />
</FrameLayout>
</RelativeLayout>
我只想居中 "CenterButton"(根 LinearLayout 的中心)但 Android 不合作..
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:layout_weight="0.00"
android:padding="5dp"
android:background="#zegerg"
android:id="@+id/LinearLayout1">
<ImageView
android:id="@+id/ImageView1"
android:layout_height="match_parent"
android:layout_width="151dp"
android:src="@mipmap/image_1"
android:contentDescription="@string/abcdef"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/CenterButton"
android:layout_gravity="center_horizontal|center_vertical|center"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text !"
android:id="@+id/TextView"
android:paddingBottom="30dp"
android:textColor="#37a52c" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ProgressBar"
android:paddingBottom="30dp"
android:progressTint="#37a52c" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_text"
android:id="@+id/Button2"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</LinearLayout>
尝试将其放在 XML 的末尾,但不起作用,因为其他元素将其推到一边。不太确定发生了什么。
给最上面的线性布局中的三个children设置重力为1,宽度为0。
您可以将 weight 用于子项的此类目的。将 layout_width 设为 0dp 并设置 layout_weight 为1.
如果您想让所有三个第一级子级都位于相同大小的列中,则需要向所有这些子级添加以下属性:
android:layout_width="0dp"
android:layout_weight="1"
(不要忘记宽度参数的尺寸 "dp",否则 IDE 会报错)。
...
<ImageView
android:id="@+id/ImageView1"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:src="@mipmap/image_1"
android:contentDescription="@string/abcdef"/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/CenterButton"
android:layout_gravity="center_horizontal|center_vertical|center"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:padding="20dp">
....
已编辑: 如果您希望您的 CenterButton 与所有其他视图重叠,那么您要做的是:
- 将所有内容包装在高度等于 200dp 的相对布局中,作为其第一个子项
- 从当前位置移除按钮 CenterButton 并将其添加到所有内容的底部,仍在相对布局内,但在线性布局下方
- 将这些属性添加到按钮,使其在父按钮中居中
android:layout_centerInParent="true"
所以最后你会有这样的东西(我已经改变了一些资源):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:layout_weight="0.00"
android:padding="5dp"
android:background="@android:color/holo_orange_dark"
android:id="@+id/LinearLayout1">
<ImageView
android:id="@+id/ImageView1"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:src="@drawable/plus"
android:contentDescription="abcdef"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text !"
android:id="@+id/TextView"
android:paddingBottom="30dp"
android:textColor="#37a52c" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ProgressBar"
android:paddingBottom="30dp"
android:progressTint="#37a52c" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:id="@+id/Button2"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button"
android:id="@+id/CenterButton"
android:layout_gravity="center_horizontal|center_vertical|center"/>
</RelativeLayout>
不清楚你的问题到底是什么。但是,这里有一些一般注意事项:
- 要使 RelativeView 中的视图或布局居中,请使用 layout_centerInParent="true"
- 要在其他布局之上创建布局,请使用 FrameLayout
- xml 文件中 views/layouts 的顺序很重要。您最后写的那个将在顶部(在我们的示例中:FrameLayout 或只是 CenterButton 应该写在 xml 文件中的其他视图和布局之后)
- 要在 LinearLayout 中分配可用的 space,请使用 android:layout_weight="1" (根据需要修改数值)
你可以试试这个例子:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="200dp">
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#fff"
android:orientation="horizontal"
android:padding="5dp">
<ImageView
android:id="@+id/ImageView1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:src="@mipmap/ic_launcher" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical">
<TextView
android:id="@+id/TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="30dp"
android:text="Text !"
android:textColor="#37a52c" />
<ProgressBar
android:id="@+id/ProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="30dp"
android:progressTint="#37a52c" />
<Button
android:id="@+id/Button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text_text" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<Button
android:id="@+id/CenterButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical|center"
android:text="Button" />
</FrameLayout>
</RelativeLayout>