Android Studio中如何设置TextView每行的行高?
Android TextView 自定义固定行高(指定字号+多行显示)
你可以通过以下几种方式实现需求:
方法一:API 28 及以上直接用 XML 属性(推荐)
从 Android 9.0(API 28)开始,TextView 新增了android:lineHeight属性,可直接设置固定行高,搭配android:textSize指定字号,同时开启多行显示:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:lineHeight="25dp" android:maxLines="100" <!-- 设为足够大的数值,或直接去掉让内容自动换行 --> android:text="你的多行文本内容" />
如果不需要限制最大行数,直接移除android:maxLines属性即可,TextView 默认支持多行换行。
方法二:兼容低版本(API <28)的 XML 方案
对于低于 API28 的版本,可通过android:lineSpacingExtra间接实现固定行高,计算逻辑为目标行高 - 文字大小,注意单位尽量统一(可近似将 dp 转为 sp):
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:lineSpacingExtra="7sp" <!-- 25dp 近似转换为25sp,减去18sp得到额外间距 --> android:maxLines="100" android:text="你的多行文本内容" />
这种方式存在单位转换误差,追求精准的话建议用代码动态计算。
方法三:代码动态设置(兼容所有版本)
要适配全版本且精准控制行高,用代码计算是最稳妥的方式:
TextView textView = findViewById(R.id.your_textview); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); // 将25dp转换为当前设备的像素值 int lineHeightPx = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 25, getResources().getDisplayMetrics() ); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // API28+直接调用系统方法设置行高 textView.setLineHeight(lineHeightPx); } else { // 低版本计算额外行间距:目标行高 - 文字实际高度 Paint paint = textView.getPaint(); float textHeight = paint.getFontMetrics().bottom - paint.getFontMetrics().top; float extraSpacing = lineHeightPx - textHeight; textView.setLineSpacing(extraSpacing, 1.0f); // 倍数设为1,仅添加额外间距 }
内容的提问来源于stack exchange,提问作者user19887284
相关产品推荐
相关产品推荐

