4

我可以通过设置 android:ellipsize="end" 来制作一个文本被省略号截断的多行 TextView,我可以通过设置 android:ellipsize="marquee" 来制作一个文本淡出的单行 TextView。但是当 TextView 中有超过一行时,选取框设置不起作用。

有没有办法通过淡出多行TextView中的最后一行来截断文本?

编辑:我可以使用两个单独的 TextViews 进行一种 hacky 实现,并将 OnLayoutChangeListener 添加到第一个以检查文本是否会超过 X 行数,然后将文本从那里剪掉并将其余部分放入第二个TextView,仅限于一行,因此可以使用 ellipsize=marquee 淡出。

<TextView
    android:id="@+id/text_one"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
/>
<TextView
    android:id="@+id/text_two"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:singleLine="true"
/>
mTextOne = (TextView) v.findViewById(R.id.text_one);
mTextTwo = (TextView) v.findViewById(R.id.text_two);

mTextOne.addOnLayoutChangeListener(new OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right,
            int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        if (mTextOne.getLineCount() > 4) {
            int start = mTextOne.getLayout().getLineStart(3);
            String twoText = mTextOne.getText().toString().substring(start);
            mTextTwo.setText(twoText);
            mTextOne.setMaxLines(3);
        }
    }
});

不幸的是,我希望对列表中的每个项目都实现这一点,但我找不到这样做的方法。我只在静态页面上有两个简单的 TextView 的情况下才使用它。

4

0 回答 0