颤振线间隔因语言而异

Ale*_*ran 3 android textview flutter

如何通过小部件强制 Flutter 遵守给定的行间隔Text

\n\n

我注意到,根据语言的不同,间隔可能会有所不同,这使得小部件的高度不可预测。例如,在阿拉伯语中,间隔更大。

\n\n

我比较了 Flutter 和 Android,发现 AndroidTextView以相同的行间隔渲染阿拉伯文本(它还会自动从右到左渲染,而 Flutter 不会,这也很可疑)。

\n\n

例子。

\n\n

颤动\n在此输入图像描述\n安卓\n在此输入图像描述

\n\n

颤振代码

\n\n
class IneterlineExample extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final style = TextStyle(\n        fontSize: 32.0,\n      height: 1.0,\n        );\n    return Scaffold(\n        appBar: AppBar(\n          title: Text(\'Interline example\'),\n\n        ),\n        body: Row(\n          crossAxisAlignment: CrossAxisAlignment.start,\n          children: <Widget>[\n            Container(\n              width: 200.0,\n              child: Text("This is a multiline text with English letters",\n                  maxLines: 4,\n                  overflow: TextOverflow.ellipsis,\n                style: style,\n              ),\n            ),\n            Container(\n              width: 200.0,\n              child: Text("\xd8\xa2\xd9\x85\xd9\x88\xd8\xb2\xd8\xb4 \xda\xa9\xd8\xa7\xd9\x85\xd9\x84 \xd8\xb7\xd8\xb1\xd8\xb2 \xd8\xaa\xd9\x87\xdb\x8c\xd9\x87 \xd9\xbe\xd9\x88\xd8\xaf\xdb\x8c\xd9\x86\xda\xaf \xd8\xb4\xda\xa9\xd9\x84\xd8\xa7\xd8\xaa\xdb\x8c \xd9\x85\xd9\x88\xd8\xb2 \xd8\xaf\xd8\xb3\xd8\xb1 \xd9\x85\xd8\xac\xd9\x84\xd8\xb3\xdb\x8c",\n                  maxLines: 4,\n                  overflow: TextOverflow.ellipsis,\n                style: style,\n              ),\n            ),\n            Container(\n              width: 200.0,\n              child: Text("\xd0\x92 \xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xbe\xd0\xbc \xd1\x8f\xd0\xb7\xd1\x8b\xd0\xba\xd0\xb5 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xb2\xd0\xb0\xd0\xbb\xd1\x8b \xd1\x82\xd0\xbe\xd0\xb6\xd0\xb5 \xd0\xbe\xd0\xba Russian",\n                  maxLines: 4,\n                  overflow: TextOverflow.ellipsis,\n                style: style,\n              ),\n            ),\n          ],\n        ));\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

安卓代码

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<android.support.constraint.ConstraintLayout\n    xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:layout_width="match_parent"\n    android:layout_height="match_parent"\n    tools:context=".ExampleActivity">\n\n  <LinearLayout\n      android:layout_width="match_parent"\n      android:layout_height="match_parent"\n      app:layout_constraintBottom_toBottomOf="parent"\n      app:layout_constraintLeft_toLeftOf="parent"\n      app:layout_constraintRight_toRightOf="parent"\n      app:layout_constraintTop_toTopOf="parent"\n      >\n    <TextView\n        android:layout_width="200dp"\n        android:layout_height="wrap_content"\n        android:text="This is a multiline text with English letters"\n        android:textSize="32dp"\n        android:maxLines="4"\n        android:ellipsize="end"\n        />\n    <TextView\n        android:layout_width="200dp"\n        android:layout_height="wrap_content"\n        android:text="\xd8\xa2\xd9\x85\xd9\x88\xd8\xb2\xd8\xb4 \xda\xa9\xd8\xa7\xd9\x85\xd9\x84 \xd8\xb7\xd8\xb1\xd8\xb2 \xd8\xaa\xd9\x87\xdb\x8c\xd9\x87 \xd9\xbe\xd9\x88\xd8\xaf\xdb\x8c\xd9\x86\xda\xaf \xd8\xb4\xda\xa9\xd9\x84\xd8\xa7\xd8\xaa\xdb\x8c \xd9\x85\xd9\x88\xd8\xb2 \xd8\xaf\xd8\xb3\xd8\xb1 \xd9\x85\xd8\xac\xd9\x84\xd8\xb3\xdb\x8c"\n        android:textSize="32dp"\n        android:maxLines="4"\n        android:ellipsize="end"\n        />\n    <TextView\n        android:layout_width="200dp"\n        android:layout_height="wrap_content"\n        android:text="\xd0\x92 \xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xbe\xd0\xbc \xd1\x8f\xd0\xb7\xd1\x8b\xd0\xba\xd0\xb5 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xb2\xd0\xb0\xd0\xbb\xd1\x8b \xd1\x82\xd0\xbe\xd0\xb6\xd0\xb5 \xd0\xbe\xd0\xba Russian"\n        android:textSize="32dp"\n        android:maxLines="4"\n        android:ellipsize="end"\n        />\n\n  </LinearLayout>\n\n\n</android.support.constraint.ConstraintLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我试图解决的最初问题是将某些文本(语言未知)调整到给定的高度。

\n\n

即我有一些文本,可能很长,还有一个盒子,宽x高固定大小。我已经计算出,根据我的字体大小和height比例,我可以容纳L文本行。所以我把maxLinesandellipsize放在 Android 应用程序中(因为行高是可预测的),但在 Flutter 应用程序中不起作用。\n如果 Flutter 文本在溢出给定框时可以省略,我也可以,但不确定如何实现这一目标。

\n

Ale*_*ran 12

我也在 github 上发布了该问题: https ://github.com/flutter/flutter/issues/23875

现在它已修复(https://github.com/flutter/flutter/commit/c6cc3cdedafee41822ce832d7d73000f2e77b183),解决方案是使用strutStylea 的属性Text

Text("Some Arabic text",
  strutStyle: StrutStyle(
    fontFamily: 'FontName',
    forceStrutHeight: true,
  ),
)
Run Code Online (Sandbox Code Playgroud)

https://docs.flutter.io/flutter/painting/StrutStyle/forceStrutHeight.html