4

android:ellipsize = "end"を設定すると、テキストが省略記号で切り捨てられる複数行のTextViewを作成できます。また、android:ellipsize = "marquee"を設定すると、テキストがフェードアウトする単一行のTextViewを作成できます。ただし、TextViewに複数の行がある場合、マーキー設定は機能しません。

複数行のTextViewの最後の行をフェードアウトしてテキストを切り捨てる方法はありますか?

編集:2つの別々のTextViewを使用して、ある種のハッキーな実装を行うことができます。最初にOnLayoutChangeListenerを追加して、テキストがX行を超えるかどうかを確認し、そこでテキストを切り取り、残りを2番目に配置します。 TextView。これは1行に制限されているため、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);
        }
    }
});

残念ながら、私はリスト内のすべてのアイテムにこれを実装することを望んでいました、そしてそれを行う方法を見つけることができません。私はこれが静的ページ上の2つの単純なTextViewの場合にのみ機能するようになりました。

4

0 に答える 0