Android TextView 数字居中问题及解决方案
Android的TextView默认是基于文本的baseline对齐的,对于单行文本,可以通过设置gravity属性为center来实现水平居中对齐。但是,对于数字17这种数字字符,它的字符高度不同于其他字符,因此无法完全居中。\n\n要解决这个问题,可以尝试以下方法之一:\n\n1. 使用android:gravity="center_vertical"属性来实现垂直居中对齐,这样数字17会在TextView的垂直中心位置。\n\nxml\n<TextView\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="17"\n android:gravity="center_vertical"\n />\n\n\n2. 自定义TextView并重写它的onDraw方法,在绘制文本之前,手动调整文本的绘制位置,使其居中。\n\njava\npublic class CenteredTextView extends TextView {\n\n public CenteredTextView(Context context) {\n super(context);\n }\n\n public CenteredTextView(Context context, AttributeSet attrs) {\n super(context, attrs);\n }\n\n public CenteredTextView(Context context, AttributeSet attrs, int defStyleAttr) {\n super(context, attrs, defStyleAttr);\n }\n\n @Override\n protected void onDraw(Canvas canvas) {\n // 获取TextView的宽度和高度\n int width = getWidth();\n int height = getHeight();\n\n // 获取文本的宽度\n Paint paint = getPaint();\n String text = getText().toString();\n float textWidth = paint.measureText(text);\n\n // 计算文本的绘制位置,使其水平居中\n float x = (width - textWidth) / 2f;\n\n // 计算文本的baseline位置,使其垂直居中\n Paint.FontMetrics fm = paint.getFontMetrics();\n float y = height / 2f - (fm.descent + fm.ascent) / 2f;\n\n // 绘制文本\n canvas.drawText(text, x, y, paint);\n }\n}\n\n\n然后,在布局文件中使用自定义的CenteredTextView:\n\nxml\n<com.example.app.CenteredTextView\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:text="17"\n />\n\n\n这样就可以实现数字17的绝对居中了。
原文地址: https://www.cveoy.top/t/topic/qe3i 著作权归作者所有。请勿转载和采集!