RelativeLayout - android:layout_centerHorizontal="true" AND android:gravity="center_horizontal" 显示意外结果

RelativeLayout - android:layout_centerHorizontal="true" AND android:gravity="center_horizontal" showing unexpected results

我试图将一些 TextViewsRelativeLayout 内的水平中心对齐,但在使用某些属性时得到了一些意想不到的结果:

  1. 为什么第二个 'Spring Summer Autumn Winter' TextView 和第一个 'Hello World' TextView 移动到水平居中(尽管它们都使用不同的水平文本对齐属性)?
  2. 对顶部使用 android:layout_centerInParent="true" TextView 将其移动到屏幕中央(这不是我想要的)

是否有 属性 可以用来将所有 TextViews 对齐到水平中心?

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

        <TextView
            android:id="@+id/textView0"
            style="@android:style/TextAppearance.Medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:text="Spring Summer Autumn Winter"
            android:layout_marginBottom="20dp"
            android:textColor="@android:color/white" />

        <TextView
            android:id="@+id/textView1"
            style="@android:style/TextAppearance.Medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="Spring Summer Autumn Winter"
            android:layout_below="@id/textView0"/>

        <TextView
            android:id="@+id/textView2"
            style="@android:style/TextAppearance.Medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:text="Hello World"
            android:layout_below="@id/textView1"/>

        <TextView
            android:id="@+id/textView3"
            style="@android:style/TextAppearance.Medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="Hello World"
            android:layout_below="@id/textView2"/>
    </RelativeLayout>
</ScrollView>

layout_center_horizontal - 这只是为了查看位置,而不是里面的文字。您可以设置文本的引力来控制 TextView 内的对齐方式,但如果您使用 RelativeLayout 和内部的 wrap_content 视图,它就不起作用,因为在这种情况下,文本已经很好地居中了。例如,使用 match_parent 将其更改为 LinearLayout - 并使用类似:

<TextView  
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:gravity="center"
android:text="@string/**yourtextstring**"
/>

Replace this XML code with yours, I used LinearLayout instedof RelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Hello World" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Hello World" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Hello World" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Hello World" />

</LinearLayout>
</ScrollView>
  1. android:gravity="center_horizontal" 适用于 LinearLayoutandroid:layout_centerHorizontal="true" 适用于 RelativeLayout.

  2. android:layout_centerInParent="true" 调整屏幕中心的视图,而它应该在水平中心。为此使用 android:layout_centerHorizontal="true"。它适用于 RelativeLayout.

要使所有 TextView 中心水平对齐,请在父级 RelativeLayout 中使用 android:gravity="center_horizontal" 属性。 要么 android:layout_centerHorizontal="true" 将此分配给每个 TextView.

以下代码适合您。

<?xml version="1.0" encoding="utf-8"?>
  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    >

    <TextView
        android:id="@+id/textView0"
        style="@android:style/TextAppearance.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Spring Summer Autumn Winter"
        android:layout_marginBottom="20dp"
        android:textColor="@android:color/white"
        android:layout_centerHorizontal="true"/>

    <TextView
        android:id="@+id/textView1"
        style="@android:style/TextAppearance.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Spring Summer Autumn Winter"
        android:layout_below="@id/textView0"
        android:layout_centerHorizontal="true"/>

    <TextView
        android:id="@+id/textView2"
        style="@android:style/TextAppearance.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:layout_below="@id/textView1"
        android:layout_centerHorizontal="true"/>

    <TextView
        android:id="@+id/textView3"
        style="@android:style/TextAppearance.Medium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:layout_below="@id/textView2"
        android:layout_centerHorizontal="true"/>
  </RelativeLayout>
</ScrollView>