相对布局重心未正确对齐

时间:2016-04-20 07:01:40

标签: android android-layout relativelayout gravity

我试图将我的相对布局的孩子放在我的屏幕中央,但它的表现就像它与父母的顶部对齐而我无法做到找出原因。

我的.XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="center"
    android:background="#f70909">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView2"
        android:adjustViewBounds="true"
        android:src="@drawable/dice"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/textMessage"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/imageView2" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editUserSplash"
        android:hint="Username"
        android:gravity="center"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/textMessage" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editPasswordSplash"
        android:hint="Password"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:layout_below="@+id/editUserSplash" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        android:id="@+id/btnSplash"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/editPasswordSplash" />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/prgSplash"
        style="@android:style/Widget.DeviceDefault.ProgressBar.Large"
        android:layout_centerHorizontal="true"
        android:indeterminate="true"
        android:layout_below="@+id/btnSplash" />

</RelativeLayout>

我尝试让父母成为relativelayout但没有成功,也不会对齐底部。最初我认为布局并没有填满整个屏幕,但由于它的高度和宽度是match_parent,我不认为这是问题所在。在android studio中,它显示正确,但我必须遗漏一些小东西。

我还尝试使用gravitylayoutgravity参数以及两者的组合,但没有成功

编辑:screenshot我需要视图相对于彼此保持相同的格式,但是在屏幕中垂直居中。

编辑2:我将RelativeLayout的背景设置为红色并得到了这个:red background因此,relativelayout不会填满我的屏幕。

编辑3:archi rayan 编辑4:archi rayan

4 个答案:

答案 0 :(得分:3)

试试这个:

<?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="match_parent"
android:background="#f70909">

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

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView2"
    android:adjustViewBounds="true"
    android:src="@drawable/dice"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:id="@+id/textMessage"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/imageView2" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editUserSplash"
    android:hint="Username"
    android:gravity="center"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/textMessage" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editPasswordSplash"
    android:hint="Password"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:layout_below="@+id/editUserSplash" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Login"
    android:id="@+id/btnSplash"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/editPasswordSplash" />

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/prgSplash"
    style="@android:style/Widget.DeviceDefault.ProgressBar.Large"
    android:layout_centerHorizontal="true"
    android:indeterminate="true"
    android:layout_below="@+id/btnSplash" />

</RelativeLayout>
</RelativeLayout>

答案 1 :(得分:1)

尝试这样的事情。

<?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="match_parent">


      <ImageView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/imageView2"
          android:adjustViewBounds="true"
          android:layout_centerInParent="true"/>

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

      <TextView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textAppearance="?android:attr/textAppearanceMedium"
          android:id="@+id/textMessage" />

      <EditText
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/editUserSplash"
          android:hint="Username"
          android:gravity="center" />

      <EditText
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/editPasswordSplash"
          android:hint="Password"
          android:gravity="center" />

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

      <ProgressBar
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/prgSplash"
          style="@android:style/Widget.DeviceDefault.ProgressBar.Large"
          android:indeterminate="true" />

  </LinearLayout>

</RelativeLayout>

更新:

如果在AlertDialog中设置xml,则底部可能会分配一个空格。我谷歌并发现此alert_dialog.xml以供参考。似乎底部有一个buttonPanel,最小高度为54dip。

<LinearLayout android:id="@+id/buttonPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="54dip"
    android:orientation="vertical" >
    <LinearLayout
        style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingTop="4dip"
        android:paddingStart="2dip"
        android:paddingEnd="2dip"
        android:measureWithLargestChild="true">
        <LinearLayout android:id="@+id/leftSpacer"
            android:layout_weight="0.25"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:visibility="gone" />
        <Button android:id="@+id/button1"
            android:layout_width="0dip"
            android:layout_gravity="start"
            android:layout_weight="1"
            style="?android:attr/buttonBarButtonStyle"
            android:maxLines="2"
            android:layout_height="wrap_content" />
        <Button android:id="@+id/button3"
            android:layout_width="0dip"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            style="?android:attr/buttonBarButtonStyle"
            android:maxLines="2"
            android:layout_height="wrap_content" />
        <Button android:id="@+id/button2"
            android:layout_width="0dip"
            android:layout_gravity="end"
            android:layout_weight="1"
            style="?android:attr/buttonBarButtonStyle"
            android:maxLines="2"
            android:layout_height="wrap_content" />
        <LinearLayout android:id="@+id/rightSpacer"
            android:layout_width="0dip"
            android:layout_weight="0.25"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:visibility="gone" />
    </LinearLayout>
 </LinearLayout>

答案 2 :(得分:1)

I think this may help you

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:gravity="center">
    <RelativeLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        android:textStyle="bold"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/textMessage"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
    <EditText
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editUserSplash"
        android:hint="Username"
        android:layout_below="@+id/textMessage"
        android:gravity="center" />
    <EditText
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editPasswordSplash"
        android:hint="Password"
        android:layout_below="@+id/editUserSplash"
        android:gravity="center" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        android:id="@+id/btnSplash"
        android:layout_below="@+id/editPasswordSplash"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

答案 3 :(得分:1)

感谢ank,我能够弄清楚RelativeLayout没有填满我的屏幕的原因是我在alertDialog中使用它。所以RelativeLayouts父级不是屏幕而是alertDialog。由于alertDialog包含其内容,因此它不会填满整个屏幕。