7

私がやろうとしていること

TextView を使用しようとしています

android:ellipsize="end"
android:maxLines="3"

"..." の代わりに "... Show More" が最後に付いています。

わたしはどこにいますか

TextView が 1 行の場合、2 つの TextView を使用できるので簡単ですが、複数行にする必要があり、「もっと表示」をインラインにする必要があります。

最後に追加される省略記号を変更する方法を探していましたが、何も見つかりませんでした。

私が考えることができる唯一の解決策は、自動省略記号をあきらめ、テキストを測定し、コードから「... Show More」を追加することです。

質問

Android が最後に追加するもの (「...」) をカスタムのものに置き換える方法はありますか?

4

1 に答える 1

10

この方法を試してください

この関数を作成します

public  void makeTextViewResizable(final TextView tv, final int maxLine, final String expandText) {

        if (tv.getTag() == null) {
            tv.setTag(tv.getText());
        }
        ViewTreeObserver vto = tv.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @SuppressWarnings("deprecation")
            @Override
            public void onGlobalLayout() {

                ViewTreeObserver obs = tv.getViewTreeObserver();
                obs.removeGlobalOnLayoutListener(this);
                if (maxLine <= 0) {
                    int lineEndIndex = tv.getLayout().getLineEnd(0);
                    String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
                    tv.setText(text);
                } else if (tv.getLineCount() >= maxLine) {
                    int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
                    String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
                    tv.setText(text);
                }
            }
        });

    }

使い方

これにより、4行目の末尾に「...」ではなく「SeeMore」が書き込まれます

makeTextViewResizable(tv, 4, "SeeMore");

これらの行をxmlに記述する必要はありません

android:ellipsize="end"
android:maxLines="3"
于 2013-09-11T10:04:27.313 に答える