web-dev-qa-db-ja.com

Android:切り捨てられた長い文字列に「...」を追加するには、Android:ellipsize = "end"よりも優れたものがありますか?

このプロパティ

「短くて非常に長い単語」

「短い」

。しかし、私はちょっとしたいです。お気に入り

「短くて非常に長い...」

現在、文字列をJavaコードで切り捨てています。ただし、リンクの実際の長さではなく文字数に基づいています。したがって、結果はあまり良くありません。

String title;
    if(model.getOrganization().length() > 19) {
      title = model.getText().substring(0, 15).trim() + "…";
    } else {
      title = model.getText();
    }
    ((TextView) findViewById(R.id.TextViewTitle)).setText(title);

更新

気づいたように、このプロパティは実際にはいくつかのケースで「...」を追加します。しかし、それらのすべてではありません:

12345678901234567890は「12345678901234 ...」になります

しかしながら、

「1234567890 1234567890」は「1234567890」になり、「1234567890 123 ...」にはなりません

更新2

今では本当にファンキーになります! singleLine = trueを設定し、maxLineを削除しました(ellipsize属性の設定の有無にかかわらずバグが表示されます)...

alt text

これはAndroid 2.1 update 1のMotorola Milestoneからのスクリーンショットです。同じAndroidバージョンのHTC Desireでも同じことが起こります

アップデート3

ここで、Android:ellipsize = "Marquee"を使用します。それが適切に機能する唯一の設定のようです。また、焦点を合わせたときのみ動きます。他の多くのアプリでも見られます。私はその一般的な慣習を推測します。

43
OneWorld

アップデート3を参照してください。回避策は「Marquee」を使用していました。現時点では、多くのアプリがこれを実行しています。現在、Androidの新しいバージョンでは、この機能はおそらく修正されており、期待どおりに動作します。(推測)

1
OneWorld

1行の場合は、これを試してください。

Android:ellipsize="end"
Android:maxLines="1"
Android:scrollHorizontally="true"
Android:singleLine="true"

それは私のために働いた。

66
bakkay

私は同様の問題があり、このプロパティをTextViewに設定すると役立ちました:

Android:singleLine="true"

また、RelativeLayoutを使用していたため、TextViewの右側にあるボタンに左マージンを設定して、TextViewが使用できるスペースを制限しました。これにより、テキストはそれ以上拡張できず、コンテンツの切り捨てが強制されます。

たぶんそれはあなたの問題の解決策ではないかもしれませんが、同じような状況で私を助けてくれました。

24
Maragues

OSで使用される private Ellipsizer class がどのように機能するかを見て、アプリ用に変更できますか?

編集:ここに作業リンクがあります- http://androidxref.com/5.1.0_r1/xref/frameworks/base/core/Java/Android/text/Layout.Java#18

1
Josh