Android 有没有办法使文本完全居中?

Android 有没有办法使文本完全居中?,android,textview,Android,Textview,我想知道是否有可能创建一个自定义文本视图,使文本完全居中,而不管字体是什么。这是我现在的主要问题,但我也想知道是否可以使用像素设置特定的高度,以便高度也保持一致。 此图显示了不同字体的大小和居中方式。图片中最长的黑线是空白的中间。除了字体外,图片中的字母在各个方面都是相同的。文本大小相同(text.setTextSize(TypedValue.COMPLEX\u UNIT\u PX,450);),并且它们都居中。我希望有人知道这些问题的答案!如果您需要我的应用程序中的任何代码,请询问。谢谢 编辑

我想知道是否有可能创建一个自定义文本视图,使文本完全居中,而不管字体是什么。这是我现在的主要问题,但我也想知道是否可以使用像素设置特定的高度,以便高度也保持一致。 此图显示了不同字体的大小和居中方式。图片中最长的黑线是空白的中间。除了字体外,图片中的字母在各个方面都是相同的。文本大小相同(
text.setTextSize(TypedValue.COMPLEX\u UNIT\u PX,450);
),并且它们都居中。我希望有人知道这些问题的答案!如果您需要我的应用程序中的任何代码,请询问。谢谢


编辑:我知道android:gravity=“Verical_center”,但这只在一定程度上起作用。您在上面看到的是在
textview
中实现的,但是每种字体都有不同的重心,因此
android:gravity=“vertical\u center”
并不能真正将所有这些重心完美地放在屏幕上。我正在寻找一种方法来创建一个定制的
textView
,它以某种方式测量文本的高度,并用这些参数将其居中。@vmironov在注释中的建议有效,但仅当
textview
有一个字符时有效。我还没能搞乱他的代码,但有机会的话我会的,如果我发现什么,我会在这里发布。谢谢

通过对包含的文本视图应用重力属性,您应该能够使文本居中

在XML中,您将为TextView分配一个属性,如下所示:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:textSize="18sp"
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:text="@string/some_text" />


如果确实要为文本指定特定大小,强烈建议使用SP(缩放像素)作为测量单位,而不是像素。您还可以为TextView设置外观属性以控制大小,代码示例中也显示了该属性。

实现所需功能的简单方法是使用以下代码:

<LinearLayout 
        android:layout_width="100dp"
        android:layout_height="20dp"
        android:gravity="center">

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/your_text" />
</LinearLayout>


如果要将文本设置为在恒定高度和宽度范围内居中对齐,请设置LinearLayout fixed的高度和宽度值

将视图的重心设置为“居中垂直”。比如:

android:gravity="center_vertical"

不记得了-是否可以手动设置TextView的定位点?能否创建一个函数,根据其中使用的字体设置定位点?能否共享此屏幕的源代码(包括字体)?我想尝试一下…@vmironov是我用于文本的自定义文本视图,是您在屏幕截图上看到的活动。请随时询问您可能需要的更多信息need@vmironov而且,第一种字体是,然后,最后一种是常规字体Roboto@TheWizKid95我花了大约一个小时,但没有任何积极的结果=(尝试使用
TextView.getTextPaint().getFontMetrics()返回的
FontMetrics
这不是
gravity
属性,这是
layout\u gravity
属性…它们是两个独立的东西,做两件不同的事情。layout\u gravity是我在TextView中使用的。我知道它们是不同的,但在我的情况下,layout\u gravity是我用于居中的属性。我明白了,但它仍然是它的缺点融合你提到的
gravity
属性,而事实上你使用的是
layou gravity
one…(我不是那个否决你的人)不用担心(我不太担心否决票)。使用不同的重力属性可能会造成混乱。无论如何,感谢您的澄清。此代码是否适用于所有textview?您需要将每个textview放置在其自己的linearlayout标记中。然后,将这些linearlayout水平放置在屏幕上,重力=父linearlayout的中心\垂直。。