我正在寻找满足此要求的最佳方法。如果在其他地方得到了回答,我深表歉意,我找不到解决这个看似简单的问题的方法。
列表中有一行文本看起来像这样:
项目标题 -(5 项)
如果项目的标题变得太长,那么它会换行,这是预期的。但是,它不应包含在“5”和“items”之间。如果需要换行,那么整个“(5 项)”应该换行到下一行。标题的文字应该是椭圆。
我似乎无法找到一种方法来创建适用于此的布局。
最佳答案
This可能有帮助。您可以使用 android:ellipsize
属性定义文本的哪一部分将被截断。
在你的情况下,根据链接的答案,我会使用 android:ellipsize="middle"
或 android:ellipsize="marquee"
,这使得文本待阅读的幻灯片。
虽然这实际上并不能满足您的要求(自动进入第二行的项目数量),但我认为这可能是更好的解决方案。
查看官方信息here .
我想到的另一件事是使用两个不同的 TextView
,一个用于标题,另一个(右对齐?)用于项目计数。我会把 android:ellipsize="end"
给第一个,把 android:layout_width="wrap_content"
给后者。
您还可以在标题下方找到一个计数 TextView,如果有足够的空间,它会附加到标题。
<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("");
}
关于android - 如果 textView 所在的行太长,则换行一段文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27989901/