【问题标题】:force android TextView to wrap强制 android TextView 换行
【发布时间】:2026-02-09 10:25:01
【问题描述】:

我正在使用支持库中的 GridLayout。一些单元格包含播放器信息 - 我使用带有两个 TextView 的线性布局。我无法获得要换行的名称(第二个文本视图)。

当前行为:

123
John Cochtousczyon

期望的行为:

123
John
Cochtousczyon

这是单元格布局 xml 的当前状态:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
    android:id="@+id/player_id"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:text="test" />

<TextView
    android:id="@+id/player_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:minLines="2"
    android:scrollHorizontally="false"
    android:text="testing thisout with extra sauce"
    android:textSize="18sp" />

</LinearLayout>

以及将他添加到网格中的代码:

    lp = (GridLayout.LayoutParams) playerCell.getLayoutParams();
    lp.columnSpec = GridLayout.spec(nameCol);
    lp.rowSpec = GridLayout.spec(nameRow);
    playerGrid.addView(playerCell, lp);

理想情况下,我想要一个解决方案,在包装名称后设置最宽单元格的列宽。我已经使用 maxEms 接近了预期的结果,但这需要平衡最可能需要的限制与较长名称可以容忍的截断量。

P'r'aps 除了修复宽度之外别无他法 - 只是想我会问,以防所有比我更聪明的人都解决了这个问题。

【问题讨论】:

    标签: android textview grid-layout word-wrap


    【解决方案1】:

    这是我目前的决定,直到出现更好的结果:

    <TextView
        android:id="@+id/player_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxEms="4"
        android:maxLines="2"
        android:text="testing thisout with extra sauce"
        android:textSize="18sp" />
    

    fill_parent、ellipsize END、maxEms 和 maxLines 的组合让我足够接近。

    【讨论】:

      【解决方案2】:

      如果有人在 2020 年仍然在寻找这个,Android 现在有一种内置的方式来做到这一点。只需将此代码添加到您的 java 文件中

      TextviewCompat.setAutoSizeTypeWithDefaults(<your textview refernce here>, TextviewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
      

      还要确保将其添加到您的 textview xml 中

      android:ellipsize="none"
      

      【讨论】:

        【解决方案3】:

        希望这会对某人有所帮助; 我只是用旧的“\n”来换行。

        【讨论】:

        • 感谢您的建议...在这种情况下,我有一个预先构造的字符串,所以我没有机会插入 CRLF