如何在Android版式内部居中放置View?


Answers:


153

步骤1:将您想要的所有内容环绕在全屏屏幕上RelativeLayout

步骤#2:为该子视图(您要在中间居中放置的视图RelativeLayoutandroid:layout_centerInParent="true"赋予属性。


19
这仅对我有用,当我将android:layout_centerInParent =“ true”属性放入RelativeLayout内部的视图中时。
德克·雅克(DirkJäckel),2011年

1
如果我想将其放置在中心位置,但是如果有可能与另一视图重叠,则将其向下移动怎么办?
2012年

4
您需要放置android:layout_centerInParent="true"子视图,而不是RelativeLayoutandroid:layout_*属性会影响视图在其父视图中的位置和大小,而不影响视图的子视图在其中的位置和大小。
卡鲁(Karu)2013年

我将在步骤3 .. classic :-D中给出BIG + 1,即使出了问题(但不要担心,请确保它会打出愚蠢的拼写错误)。
McLan

29

您可以使用XML属性android:layout_gravity“将居中应用于任何视图,包括布局。您可能希望为其赋予值” center“。

您可以在此处找到此选项可能值的参考:http : //developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#attr_android : layout_gravity


2
AFAIK,layout_gravity仅适用于LinearLayout,不适用于任意布局。
CommonsWare,2009年

正如您提到的,layout_gravity仅适用于LinearLayout,RelativeLayout又如何呢,因为在应用程序中我想在TextView上嵌入textview
Vicky

我也使用relativelayout进行了尝试,并且我认为它
可行

它不仅用于LinearLayout,请参见以下示例:curious-creature.org/2009/03/01/…–
Jan Berkel

FrameLayoutLinearLayout都支持android:layout_gravity他们的孩子。RelativeLayout才不是。这一切都 文档
卡鲁(Karu)2013年

19
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
    <ProgressBar
        android:id="@+id/ProgressBar01"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        android:layout_height="wrap_content"></ProgressBar>
    <TextView
        android:layout_below="@id/ProgressBar01"
        android:text="@string/please_wait_authenticating"
        android:id="@+id/txtText"
        android:paddingTop="30px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></TextView>
</RelativeLayout>


6

如果要居中放置一个视图,请使用此视图。在这种情况下,TextView必须是XML中的最低视图,因为它的layout_height是match_parent。

<TextView 
    android:id="@+id/tv_to_be_centered"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:gravity="center"
    android:text="Some text"
/>

他的意思是将布局放在中心,而不是视图。
IgorGanapolsky 2012年

1
@IgorG。布局和视图的位置相同,因为布局视图。
FoamyGuy 2012年

1
Layoutwidges做延伸ViewGroup...但是ViewGroup延伸查看。所以Layout 是一个 ViewGroup,并且ViewGroup View
FoamyGuy

仅当所讨论的视图没有背景或单击侦听器等时,此方法才有效。-基本上,如果您无法说出它正在变大,就可以使用。此外,视图将需要支持该android:layout_gravity属性。
卡鲁(Karu)

6

更新答案:约束布局

看来现在Android中的趋势是使用约束布局。尽管使用a来使视图居中非常简单RelativeLayout(如其他答案所示),ConstraintLayoutRelativeLayout对于更复杂的布局而言,的功能要比强大。因此,值得学习如何做。

要使视图居中,只需将手柄拖到父对象的所有四个侧面即可。

在此处输入图片说明


您使用什么工具来录制视频并将其创建为gif图片?谢谢!
WhatsUP

@WhatssUP,我不记得我为那个特殊的gif动画使用了哪一个。这将取决于您的操作系统。我正在使用Linux。在Google中搜索“ Linux动画gif制作器”之类的内容。在Mac上,我现在使用LICEcap。
苏拉奇

3

它将适用于该代码,有时需要两个属性

android:layout_gravity="center"
android:layout_centerHorizontal="true"


1

使用ConstraintLayout。这是一个根据父屏幕的宽度和高度将视图居中的示例:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#FF00FF"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHeight_percent=".6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent=".4"></LinearLayout>
</android.support.constraint.ConstraintLayout>

您可能需要更改gradle以获得ConstraintLayout的最新版本:

dependencies {
...
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}

在此处输入图片说明


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.