我在找最好的方法来满足这个要求。我很抱歉,如果其他地方已经回答了这个问题,我找不到解决这个看似简单的问题的办法。
列表中有一行文本,如下所示:
项目标题-(5个项目)
如果项目的标题太长,则会换行,这是预期的。但是,它不应该在“5”和“items”之间换行。如果需要包装,那么整个“(5个项目)”应该包装到下一行。标题的文本应该是椭圆形的。
我似乎找不到一种方法来创建一个可以解决这个问题的布局。
最佳答案
This可能会有帮助。您可以使用android:ellipsize
属性定义要截断文本的哪个部分。
在您的情况下,根据链接的答案,我将使用android:ellipsize="middle"
或android:ellipsize="marquee"
,这将使文本滑动以供阅读。
虽然这实际上并不能满足您的需求(项目数自动转到第二行),但我认为这可能是一个更好的解决方案。
见官方信息。
我想到的另一件事是使用两个不同的TextView
s,一个用于标题,另一个(右对齐?)对于项目计数。我会把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("");
}