7

[已解决] 我必须添加android:fillViewport="true"到 ScrollView,这解决了文本不垂直居中的问题。

我知道这已经被回答过很多次了,但我仍然无法将 textview 的文本垂直居中。

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

    <RelativeLayout
        android:id="@+id/relativelayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/icon"
            android:layout_width="@dimen/icon_width"
            android:layout_height="@dimen/icon_height"
            android:src="@drawable/picture" />

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/icon"
            android:gravity="center_vertical"
            android:layout_alignBottom="@+id/icon"
            android:layout_alignTop="@+id/icon"
            android:text="@string/title_text"
            android:textSize="@dimen/textsize"
            android:textStyle="bold"
            android:textColor="@color/color"
            android:shadowColor="@color/shadow"
            android:shadowRadius="5"/>

        </RelativeLayout>
</ScrollView>

通常这应该与

android:gravity="center_vertical"

但它对文本视图没有影响......

奇怪的是我有第二个应用程序,它的代码完全相同,它在那里工作没有任何问题。

/编辑

澄清我的问题:这就是我现在所拥有的:
http://i.imgur.com/WwHCegq.png

这就是我想要的:
http://i.imgur.com/9T8CyT6.png

4

8 回答 8

9

要达到您想要的结果,删除就足够了

android:gravity="center_vertical"
android:layout_alignBottom="@+id/icon"
android:layout_alignTop="@+id/icon"

并添加

android:layout_centerVertical="true"

反而。

于 2013-09-10T18:28:23.737 回答
1

android:gravity 指定父级将如何定位其子级。在这种情况下,父级是 TextView,子级是该视图中的实际文本。如果 TextView(父)不比文本(子)宽,那么重力将不起作用。

供参考的 android:gravity 文档:

指定当文本小于视图时如何通过视图的 x 轴和/或 y 轴对齐文本。

像这样设置 TextView 的宽度:

android:layout_width="match_parent"

这应该导致文本垂直居中。

于 2013-09-10T16:24:38.607 回答
1

当您使用相对布局时,您可以添加到您的 TextView:

`android:layout_centerVertical="true"`
于 2013-09-10T16:48:51.193 回答
1

如果您只关心您的文本本身,一种可行的解决方案(以上所有方法都不起作用)是使 textView 与 imageView 一样高(通过将其对齐到顶部而没有边距,底部到“其他”的 id views") 然后在此文本框中使用 android:gravity="center" (确保没有其他对齐方式干扰此重力)

于 2016-09-20T00:46:00.487 回答
0

我认为您可以尝试以下方法之一:

  1. 在 TextView 中,设置 android:layout_centerVertical="true"

或者

  1. 作为第一个答案,但我认为应该是 android:layout_height="match_parent"

为什么您在第二个应用程序中的代码有效,我猜,也许图像的高度等于 textView

于 2013-09-10T16:33:42.230 回答
0

对于其他有此问题的人,api 18 之后的相对布局中存在错误,请参阅https://code.google.com/p/android/issues/detail?id=59368

对我有用的修复是用此代码替换我的相对布局(在上面的链接中找到)

免责声明:这仅在一种特定情况下有效。它在另一个方面失败了。如果您愿意,请随时尝试

public class FixRelativeLayoutBug extends RelativeLayout {
    public FixRelativeLayoutBug(Context context) {
        super(context);
    }

    public FixRelativeLayoutBug(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FixRelativeLayoutBug(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    private static final int AT_MOST_UNSPECIFIED = MeasureSpec.makeMeasureSpec((1<<30)-1, MeasureSpec.AT_MOST);

    @Override
    protected void onMeasure(int widthSpec, int heightSpec)
    {
        // RelativeLayout has bugs when measured in UNSPECIFIED height mode that were supposedly fixed
        // in API 18. However the 'fix' does not work with breaks gravity == center_vertical in TextView.
        // https://code.google.com/p/android/issues/detail?id=63673
        if (MeasureSpec.getMode(heightSpec) == MeasureSpec.UNSPECIFIED) heightSpec = AT_MOST_UNSPECIFIED;
        super.onMeasure(widthSpec, heightSpec);
    }
}
于 2014-08-20T18:06:04.963 回答
0

用此代码替换您的 TextView ,它将正常工作

        <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/icon"
        android:layout_alignParentTop="true"
        android:layout_alignTop="@+id/icon"
        android:layout_toRightOf="@+id/icon"
        android:shadowColor="@color/shadow"
        android:shadowRadius="5"
        android:text="@string/title_text"
        android:textColor="@color/color"
        android:textSize="@dimen/textsize"
        android:textStyle="bold" />
于 2013-09-10T17:41:13.093 回答
0

要在 TextView 的范围内精确地垂直居中文本,您可以使用:

android:gravity="center_vertical"

如果您仍然有一个小的错位,文本看起来不是完全垂直居中,这可能取决于您的字体填充。尝试:

android:includeFontPadding="false"

字体填充有时会使文本稍微偏离中心,所以这会有所帮助。

于 2021-12-09T17:48:56.070 回答