3

我正在构建一个新的信息窗口(谷歌地图 api v2),我试图让我的布局完美。该布局的一部分是这样的:

  <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
  android:id="@+id/txtInfoWindowName"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  android:ellipsize="end"
  android:singleLine="true"
  android:textColor="#ff000000"
  android:textSize="14dp"
  android:textStyle="bold"/>
<TextView
  android:id="@+id/txtInfoWindowObstacles"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:ellipsize="end"
  android:maxLength="32"
  android:lines="1"
  android:singleLine="true"
  android:textColor="#ff7f7f7f"
  android:textSize="14dp"/>

现在,问题在于android:ellipsize="end". 它应该在最后绘制三个点,但它没有这样做。现在我得到这样的东西:

TextTextTextTextTe

而不是这个:

TextTextTextTextTe...

我认为这与我使用 layout_width="wrap_content" 的事实有关。但我需要它,因为我使用的是 LinearLayout

4

2 回答 2

9

我试过你的代码,它们工作正常,除了第二个 TextView 具有属性android:maxLength="32",在这种情况下,由于 32 个字符的限制,文本不能被省略。但是,如果您删除它,它会按预期工作。

于 2013-01-05T21:05:15.987 回答
3

还有另一种选择 - 您可以使用如下代码格式化字符串:

private static final int STR_MAX_CHAR_COUNT = 32;

private String formatString(String stringToFormat) {
    if(stringToFormat.length() > STR_MAX_CHAR_COUNT){
        stringToFormat = stringToFormat.substring(0, STR_MAX_CHAR_COUNT - 1) + "...";
    }
    return stringToFormat;
}

然后像这样设置字符串:

String newText = "some long-long text";
mTextView.setText(formatString(newText))
于 2013-05-31T08:59:49.903 回答