RelativeLayout - android:layout_centerHorizo​​ntal =“true”AND android:gravity =“center_horizo​​ntal”显示意外结果

时间:2017-03-08 21:09:03

标签: android xml textview android-relativelayout

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

  1. 为什么第二个'春夏秋冬'TextView和第一个'Hello World'TextView移动到水平中心(即使它们都使用不同的水平文本对齐属性)?
  2. 使用android:layout_centerInParent="true"作为顶部TextView将其移至屏幕中心(这不是我想要的)
  3. 是否有可用于将所有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>
    

    enter image description here

3 个答案:

答案 0 :(得分:3)

layout_center_horizontal - 它只适用于查看位置,而不适用于内部文本。您可以设置文本的重力来控制TextView内的对齐方式,但如果您在RelativeLayout内部使用wrap_content个视图,则无效,因为在这种情况下,文本已经很好地居中。例如,使用LinearLayout将其更改为match_parent,并使用类似:

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

答案 1 :(得分:1)

  

将此XML代码替换为您的代码,我使用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>

答案 2 :(得分:0)

  1. android:gravity="center_horizontal"适用于LinearLayout,而android:layout_centerHorizontal="true"适用于RelativeLayout

  2. android:layout_centerInParent="true"调整屏幕中心的视图,同时它应位于水平中心。对于此用途android:layout_centerHorizontal="true"。它适用于RelativeLayout

  3. 用于对齐父TextView中的所有android:gravity="center_horizontal"中心水平使用RelativeLayout属性。 要么 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>