You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 14真机TextAlign.Justify失效,文本无法两端对齐求助

问题:Jetpack Compose Text两端对齐在真机与模拟器表现不一致

问题描述

我在使用Jetpack Compose开发时,为Text组件设置了textAlign = TextAlign.Justify、lineBreak = LineBreak.Paragraph、hyphens = Hyphens.Auto。在Android 14模拟器中,文本除最后一行外均按屏幕宽度两端对齐,但在真机上所有行(非仅段落末行)均左对齐,未按预期实现两端对齐效果。未修改任何Android系统设置,请问这是什么原因?哪里操作有误?

运行环境

  • Android 14

对比截图

模拟器两端对齐效果
真机左对齐效果

代码实现

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
      MyApplicationTheme {
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
          HomeText(
            modifier = Modifier.padding(innerPadding)
          )
        }
      }
    }
  }
}

@Composable
fun HomeText(modifier: Modifier = Modifier) {
  Text(
    text = stringResource(R.string.home_long_text),
    modifier = modifier
      .fillMaxSize()
      .verticalScroll(rememberScrollState())
      .padding(20.dp)
      .fillMaxWidth(),
    style = TextStyle(
      textAlign = TextAlign.Justify,
      lineBreak = LineBreak.Paragraph,
      hyphens = Hyphens.Auto
    )
  )
}

@Preview(showBackground = true)
@Composable
fun HomeTextPreview() {
  MyApplicationTheme {
    HomeText()
  }
}

原因分析与解决方案

核心原因

  1. 厂商自定义字体兼容性:部分Android真机厂商替换了系统默认字体,部分自定义字体对TextAlign.Justify的支持不完善,尤其是连字符(Hyphens)特性的适配较差,直接导致两端对齐失效。
  2. 连字符功能的系统差异:Hyphens.Auto依赖系统内置的连字符字典和排版引擎,部分真机厂商未完整实现Android 14的排版规范,甚至默认禁用该功能;而模拟器使用原生Android系统,完整支持该特性。
  3. 布局约束顺序问题:代码中fillMaxWidth()在padding之后,可能导致宽度计算时未正确填充可用空间,影响对齐逻辑。

修复步骤

  • 调整布局Modifier顺序:将fillMaxWidth()移到padding之前,确保宽度计算基于完整可用空间:
    modifier = modifier
      .fillMaxSize()
      .verticalScroll(rememberScrollState())
      .fillMaxWidth()
      .padding(20.dp)
    
  • 排除字体影响:临时使用系统默认字体测试,验证是否是字体兼容性问题:
    style = TextStyle(
      textAlign = TextAlign.Justify,
      lineBreak = LineBreak.Paragraph,
      hyphens = Hyphens.Auto,
      fontFamily = FontFamily.SansSerif
    )
    
  • 禁用连字符测试:移除hyphens = Hyphens.Auto,仅保留textAlign和lineBreak设置,部分字体在禁用连字符后可正常触发两端对齐。
  • 中文文本特殊处理:若文本为中文,Android原生两端对齐对中文支持有限,需借助第三方排版库(如compose-text扩展)实现更稳定的中文两端对齐。

内容的提问来源于stack exchange,提问作者Apeva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:22:40