Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android文本查看中心文本_Android_Xml_View_Textview - Fatal编程技术网

Android文本查看中心文本

Android文本查看中心文本,android,xml,view,textview,Android,Xml,View,Textview,我正在制作一个导航抽屉,我希望它看起来像Gmail中的那个。但在我的文本视图中间有一个字母的循环,我遇到了一些麻烦。我有Android:重力设置为中心,但它还不完全在中间。 它被移动到底部一点,因此看起来很糟糕 我也尝试过创建自定义视图,但也遇到了同样的问题 有人知道如何解决这个问题吗 header.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.

我正在制作一个导航抽屉,我希望它看起来像Gmail中的那个。但在我的文本视图中间有一个字母的循环,我遇到了一些麻烦。我有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>

谢谢


编辑:我将“水平居中”改为“居中”,因为这是我截图时代码中的内容。你是对的:文本视图中的文本居中不会正确居中。给定的文本总是有点移位,因为文本顶部添加了一些填充。这就是为什么需要创建customview,设置绘制对象,然后将文本正确放置在视图中

首先,创建绘制对象以测量文本:

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);

您是正确的:文本视图中的文本居中不会正确居中。给定的文本总是有点移位,因为文本顶部添加了一些填充。这就是为什么需要创建customview,设置绘制对象,然后将文本正确放置在视图中

首先,创建绘制对象以测量文本:

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);

我认为您需要修改android:textAlignment=“center”并将文本居中于textview中,而不是将textview置于其容器内居中

我认为您需要修改android:textAlignment=“center”在textview中居中显示文本,而不是在其容器中居中显示textview。我认为您为textview提供了背景,因此它无法正常工作。由于您使用64 dp绘制圆,而且textview的宽度为64,因此它可能无法正常工作

所以,选择下面两个选项

1) 尝试增大文本视图的宽度或减小圆圈的宽度并进行检查

如果不起作用,则需要应用以下第二种解决方案

2) 将circle设置为layout,然后在其中添加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>

我认为您已经为textview提供了背景信息,因此它无法正常工作。由于您使用64 dp绘制圆,而且textview的宽度为64,因此它可能无法正常工作

所以,选择下面两个选项

1) 尝试增大文本视图的宽度或减小圆圈的宽度并进行检查

如果不起作用,则需要应用以下第二种解决方案

2) 将circle设置为layout,然后在其中添加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>


我想你指的是M标志?你可能不应该使用文本视图,它应该是一个图像。@Gabeschen是的,我指的是M。如果它是一个图像,我必须制作很多图像-每个字母一个。必须有一个更有效的方法。好吧,我以为M是某种标志。您可能需要转到“自定义视图”以更好地控制图形。绘图文本实际上相当复杂-例如,如果您想居中,您是将基线居中到上升还是将下降居中到上升?选错一个,你就不会得到你想要的效果。我想你是说M标志吧?你可能不应该使用文本视图,它应该是一个图像。@Gabeschen是的,我指的是M。如果它是一个图像,我必须制作很多图像-每个字母一个。必须有一个更有效的方法。好吧,我以为M是某种标志。您可能需要转到“自定义视图”以更好地控制图形。绘图文本实际上相当复杂-例如,如果您想居中,您是将基线居中到上升还是将下降居中到上升?如果选错了,你就不会得到你想要的效果。这会使文本完全水平居中,而不是垂直居中。这会使文本完全水平居中,而不是垂直居中