Android文本查看中心文本
我正在制作一个导航抽屉,我希望它看起来像Gmail中的那个。但在我的文本视图中间有一个字母的循环,我遇到了一些麻烦。我有Android:重力设置为中心,但它还不完全在中间。 它被移动到底部一点,因此看起来很糟糕 我也尝试过创建自定义视图,但也遇到了同样的问题 有人知道如何解决这个问题吗 header.xml: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.
<?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是某种标志。您可能需要转到“自定义视图”以更好地控制图形。绘图文本实际上相当复杂-例如,如果您想居中,您是将基线居中到上升还是将下降居中到上升?如果选错了,你就不会得到你想要的效果。这会使文本完全水平居中,而不是垂直居中。这会使文本完全水平居中,而不是垂直居中