0

我们尝试一个简单的事情。在 RelativeLayout 中水平和垂直居中显示 TextView。

这应该是

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

出乎所有人的意料,文本出现在左上方。

但是现在为整个事情添加一个完全没有意义的 LinearLayout:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- First item in a relative Layout cannot be centered  -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
         >
    </LinearLayout>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

和tadaaaa!文本出现在我们希望他出现的位置。如果不更改 TextView 的位置,则无法删除 LinearLayout 中的任何行。在您可以居中任何其他项目之前,RelativeLayout 似乎需要一些项目与顶部/底部和右/左对齐。

4

1 回答 1

1

类似的问题?

问题描述

我目前有一个类似的问题,RelativeLayout因为TextView使用android:layout_centerInParent="true".

在 API 级别 21 设备或模拟器上运行我的代码会显示文本正确居中。

但是,在 API 级别 19 上运行相同的代码会将文本视图放在包装的 RelativeLayout 的顶部,而不是居中。

示例项目

只是为了便于理解,我在https://github.com/hanscappelle/SO-16731025创建了一个示例项目,只需从 git 中查看此代码并导入 Android Studio,您应该能够运行该代码。

可视化

您甚至可以使用 Android Studio 中的设计预览测试此问题,只需更改用于渲染的 SDK 版本即可。

只需打开文件,layout/with_scrollview.xml您应该可以在 Android Studio 的预览中看到它的可视化。

使用 API 级别 21:

在此处输入图像描述

使用 API 级别 19 的相同布局:

在此处输入图像描述

解决方法

包装滚动视图

作为一种解决方法,我发现删除包装 ScrollView 可以解决问题。

什么没有帮助

虚拟视图

像您建议的那样在两者之间添加一个虚拟LinearLayout(或任何其他视图)并不能解决我的问题。

示例项目在屏幕右侧的圆圈中应用了这种技术。

于 2015-03-31T13:56:08.960 回答