不能垂直居中textview的文本

时间:2013-09-10 16:20:31

标签: android textview center

[解决]我不得不将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"

但它对textview没有影响...

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

/编辑

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

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

7 个答案:

答案 0 :(得分:7)

为了达到你想要的效果,删除

就足够了
android:gravity="center_vertical"
android:layout_alignBottom="@+id/icon"
android:layout_alignTop="@+id/icon"

并添加

android:layout_centerVertical="true"

代替。

答案 1 :(得分:1)

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

android:gravity docs供参考:

  

指定如何在视图的x轴和/或y轴上对齐文本   文本小于视图。

设置TextView的宽度,如下所示:

android:layout_width="match_parent"

这应该使文本垂直居中。

答案 2 :(得分:1)

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

`android:layout_centerVertical="true"`

答案 3 :(得分:1)

使用此代码替换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" />

答案 4 :(得分:1)

如果您只关心文本本身,那么可以使用的一个解决方案(以上所有内容)是使textView与imageView一样高(通过将其对齐到顶部而没有边距和底部)到&#34;其他视图&#34;)然后使用android:gravity =&#34; center&#34;在此文本框中(确保没有其他对齐干扰此重力)

答案 5 :(得分:0)

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

  1. 在TextView中,设置android:layout_centerVertical =“true”
    1. 作为第一个答案,但我认为它应该是android:layout_height =“match_parent”
    2. 为什么第二个应用程序中的代码可以工作,我想,也许图像的高度等于textView

答案 6 :(得分: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);
    }
}
相关问题