您可以在RelativeLayout中将Button居中吗?


176

我正在尝试使按钮在相对布局中居中,这可能吗?我已经尝试过重力和方向功能,但是它们什么也没做。


1
语言?框架?操作系统?
Arnold Spence 2010年

3
@Arnold Spence:您击败了我24秒:)
Nippysaurus 2010年

3
抱歉,这是我第一次使用Stack Overflow。是的,我正在为Android开发。=)
阿卡迪亚

7
没问题。正确的标签将更快地吸引正确的人。固定的:)
阿诺德·斯彭斯

8
为阿诺德·斯彭斯+1表示体贴。SO上的某些人会因为只是“新手”而口头上破坏了OP。
2014年

Answers:


373

尝试

android:layout_centerHorizontal="true"

完全像这样,它对我有用:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#ff0000">

    <Button
        android:id="@+id/btn_mybutton"
        android:layout_height="wrap_content"
        android:layout_width="124dip"
        android:layout_marginTop="5dip"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

5
如果您的宽度有match_parent,则无法使用。
Ghoti 2014年

2
如果宽度有match_parent,则它已经在水平方向上居中了。
ataulm

103

您可以使用CENTER_IN_PARENT进行相对布局。

添加android:layout_centerInParent="true"到要在RelativeLayout中居中的元素


它水平和
垂直居中

37

Arcadia,只需尝试下面的代码。有几种获得所需结果的方法,这是较简单的方法之一。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:gravity="center">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"/>
</RelativeLayout>

设置RelativeLayout本身的重力会影响放置在其中的所有对象。在这种情况下,它只是按钮。当然,您可以在此处使用任何重力设置(例如,center_horizo​​ntal,top,right等)。

您还可以在下面使用此代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"
        android:layout_centerInParent="true"/>
</RelativeLayout>

1
谢谢。但是,如果我有多个按钮,并且只想要一个按钮居中,我该怎么做?第一个代码将所有内容置于父相对布局的中心。另外,如何将按钮居中于行的顶部?
阿卡迪亚

仅使用第二个示例,仅将centerInParent添加到要居中的按钮。您还可以使用centerHorizo​​ntal和layout_alignParentTop将其与顶部对齐并水平居中。您到底想达到什么目的,我可以举一个更好的例子。
凯文·科波克

我刚刚开始研究android开发,并试图完全理解如何操纵事物来完成我想要的事情。基本上,我想避免使像素对齐,因为在不同的屏幕类型/分辨率下,图片看起来可能会非常不同。但是,当您使用重力命令时,所有内容都会跟随它。我尝试通过使用ignoreGravity禁用按钮的重力,但它没有用。这东西很棘手。
阿卡迪亚

是的,肯定可以。有很多方法可以进行任何特定的布局。最好的方法是按照自己的意愿在脑海中绘制草图,然后从那里开始。这种快速教程可以帮助一些太:developer.android.com/resources/tutorials/views/...
凯文科波克

是的,我实际上是在做该教程。我将遍历每个教程,并学习如何完全操纵它们,否则我将无法掌握每个教程的不同之处。
阿卡迪亚

25

总结一下

新增:

android:layout_centerInParent="true"

如果还为视图设置了以下属性之一,则仅适用于RelativeLayout:

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"

使子视图与父视图对齐。“中心”基于您选择的对齐轴:

左/右->垂直

顶部/底部->水平

在视图内设置子级/内容的重力:

android:gravity="center"

如果未设置对齐方式,则在任何情况下都将子项置于父视图的中央。可选,您可以选择:

<!-- Axis to Center -->
android:gravity="center_horizontal"
android:gravity="center_vertical"

<!-- Alignment to set-->
android:gravity="top"
android:gravity="bottom"
android:gravity="left"
android:gravity="right"
android:gravity="fill"
...

然后是:

android:layout_gravity="center"

这将视图本身置于父视图的中心

最后,您可以将以下属性添加到父视图:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

8

android:centerInParent="true"当您想在相对布局中将视图居中时,请使用view内部的属性。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NWE"
        android:textSize="30dp"/>
</RelativeLayout>

5

它很容易,不要将它对准任何东西

<Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"
        android:text="Centered Button"/>


2

要在一个方向上居中对齐,请在子布局中使用android:layout_centerHorizo​​ntal =“ true”或android:layout_centerVertical =“ true”


2

真的很简单。试试下面的代码,

<RelativeLayout
    android:id="@+id/second_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/first_RL"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

1
这里不欢迎仅提供代码的答案。尝试发布有关上述答案为何起作用的更多详细信息。:)
Vivz

感谢您的指导。我是新来的。
Primesh

1

删除像android:layout_alignParentStart =“ true”之类的任何对齐方式并添加centerInParent对我来说都是有效的。如果“对齐”停留在其中,则centerInParent不起作用


0

您必须将其与父视图的左侧或右侧对齐

使用android:centerInParent="true"代码时请勿使用以下任何一种 :

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

等等


0

这非常简单,只需用于Android:CenterInParent="true"水平和垂直Android:Horizontal="true"居中,或用于水平和居中Android:Vertical="true"

并确保将所有内容写在RelaytiveLayout中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.