Android TextView中心文字完全正确

时间:2016-02-19 23:52:53

标签: android xml view textview

我正在制作导航抽屉我希望它看起来像Gmail中的导航抽屉。但是我的TextView中间带有字母的圆圈有些麻烦。我有android:重力设置为中心但它仍然不完全在中间。

它被移到了底部,因此看起来很糟糕。

我也尝试过创建自定义视图,但我遇到了同样的问题。

有没有人知道如何解决这个问题?

header.xml:

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

    <ImageView
        android:layout_width="300dp"
        android:layout_height="168dp"
        android:src="@mipmap/header_background"
        android:scaleType="fitXY"
        android:id="@+id/imageView2" />

    <TextView
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:layout_marginLeft="16dp"
        android:layout_marginBottom="8dp"
        android:layout_above="@+id/subtitle"
        android:gravity="center"
        android:text="M"
        android:textAllCaps="true"
        android:textSize="48sp"
        android:textColor="@color/actionbar"
        android:fontFamily="sans-serif-medium"
        android:background="@drawable/circle" />

    <RelativeLayout
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentBottom="true"
        android:id="@+id/subtitle">

        <LinearLayout
            android:layout_centerVertical="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/name"
                android:text="My Name"
                android:textSize="14sp"
                android:textColor="#FFFFFF"
                android:fontFamily="sans-serif-medium"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/name"
                android:text="my.mail@my.server"
                android:textColor="#FFFFFF"
                android:textSize="14sp"
                android:fontFamily="sans-serif"/>
        </LinearLayout>

</RelativeLayout>

circle.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid android:color="@android:color/white"/>
    <size
        android:width="64dp"
        android:height="64dp"/>
</shape>

The M is not exactly in the middle

由于

编辑:我将“center_horizo​​ntal”更改为“center”,因为这是我在拍摄屏幕截图时的代码中所用的内容

3 个答案:

答案 0 :(得分:0)

你是对的:在TextView中居中文本不会使文本正确居中。给定的文本总是稍微移位,因为在文本的顶部添加了一些填充。这就是您需要创建自定义视图,设置Paint对象然后将文本正确放置在视图中的原因。

首先,创建一个Paint对象来测量文本:

Paint mPaint = new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setTextAlign(Paint.Align.CENTER);
mPaint.setColor(Color.BLUE);
mPaint.setTextSize(12);

然后,在customView的onDraw方法中,执行以下操作:

canvas.drawText(mText, getWidth()/2, getHeight()/2, mPaint);

答案 1 :(得分:0)

我想你要修改android:textAlignment =&#34; center&#34;并将文本置于文本视图中心,而不是将textview集中在其容器中

答案 2 :(得分:0)

我认为你已经给出了textview的背景知识,因此它无法正常工作。因为你有64 dp的绘制圆,而且textview的宽度是64,所以它可能无法正常工作。

因此,请检查以下2个选项。

1)尝试增加textview的宽度或减小圆的宽度并检查。

如果它不起作用,那么你需要在第二个解决方案下面申请。

2)将圆圈设置为布局,然后在其中添加textview,如下所示。

    <RelativeLayout
         android:layout_width="70dp"
         android:layout_height="70dp"
         android:layout_marginLeft="16dp"
         android:layout_marginBottom="8dp"
         android:layout_above="@+id/subtitle"
         android:gravity="center"
         android:background="@drawable/circle" />

             <TextView
                 android:layout_width="64dp"
                 android:layout_height="64dp"
                 android:layout_centerInParent="true"
                 android:gravity="center"
                 android:text="M"
                 android:textAllCaps="true"
                 android:textSize="48sp"
                 android:textColor="@color/actionbar"
                 android:fontFamily="sans-serif-medium"/>
    </RelativeLayout>