我在找最好的方法来满足这个要求。我很抱歉,如果其他地方已经回答了这个问题,我找不到解决这个看似简单的问题的办法。
列表中有一行文本,如下所示:
项目标题-(5个项目)
如果项目的标题太长,则会换行,这是预期的。但是,它不应该在“5”和“items”之间换行。如果需要包装,那么整个“(5个项目)”应该包装到下一行。标题的文本应该是椭圆形的。
我似乎找不到一种方法来创建一个可以解决这个问题的布局。

最佳答案

This可能会有帮助。您可以使用android:ellipsize属性定义要截断文本的哪个部分。
在您的情况下,根据链接的答案,我将使用android:ellipsize="middle"android:ellipsize="marquee",这将使文本滑动以供阅读。
虽然这实际上并不能满足您的需求(项目数自动转到第二行),但我认为这可能是一个更好的解决方案。
见官方信息。
我想到的另一件事是使用两个不同的TextViews,一个用于标题,另一个(右对齐?)对于项目计数。我会把android:ellipsize="end"给第一个,把android:layout_width="wrap_content"给后者。
此外,您还可以在标题下面找到count文本视图,如果有足够的空间,它将被追加到标题后面。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/container"
    android:orientation="vertical" >

    <TextView android:id="@+id/text1"
        android:text="a very very very long title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end" />


    <TextView android:id="@+id/text2"
        android:text="(5 items)"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

在代码中,您可以检查宽度:
View container = findViewById(R.id.container);
TextView tv1 = (TextView) findViewById(R.id.text1);
TextView tv2 = (TextView) findViewById(R.id.text2);


String HEADER = tv1.getText();
String COUNT = tv2.getText();

int widthHeader = tv1.getWidth();
int widthCount = tv1.getWidth();
int widthAvailable = container.getWidth();

if (widthAvailable - widthHeader > widthCount) {
    tv1.setText(HEADER + " - " + COUNT);
    tv2.setText("");
}

10-06 12:42
查看更多