28

以下のxml-layoutで定義されたカスタムオブジェクトを持つlistViewがあります。IDが「info」のtextViewを1行で省略表示したいのですが、属性を使用してみました

android:singleLine="true"
android:ellipsize="end"

成功せずに。

たとえば、layout_widthを固定幅に設定した場合

android:layout_width="100px"

テキストはうまく切り捨てられます。しかし、移植性の理由から、これは受け入れられる解決策ではありません。

問題を見つけることができますか?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5px"
>
<TextView  
android:id="@+id/destination"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="22dp"
android:paddingLeft="5px"
/>

<TextView  
android:id="@+id/date"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="15dp"
android:paddingLeft="5px"
/>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/info_table"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5px"
android:paddingTop="10px" 
>
    <TableRow>
        <TextView
            android:id="@+id/driver_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/driver_label" />
        <TextView
            android:id="@+id/driver" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/passenger_label"
            android:gravity="right"
            android:paddingRight="5px"
            android:text="@string/passenger_label" />
        <TextView
            android:id="@+id/passengers" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/info_label"
            android:gravity="right"
            android:paddingRight="5px" 
            android:text="@string/info_label"/>
        <TextView
            android:id="@+id/info"
            android:layout_width="fill_parent"
            android:singleLine="true"
            android:ellipsize="end" />
    </TableRow>
</TableLayout> 

4

9 に答える 9

40

非推奨のプロパティを使用しないと、次の行がうまく機能します

android:ellipsize="end" 
android:lines="1"
android:scrollHorizontally="true"

参照http://code.google.com/p/android/issues/detail?id=882#c9

于 2010-12-04T21:41:54.160 に答える
24

Ellipsize は壊れているため (バグ レポートに投票してください。特に再現性がないと主張しているため)、小さなハックを使用する必要があります。使用する:

android:inputType="text"
android:maxLines="1"

エリプサイズしたいものなら何でも。また、使用しないでくださいsingleLine。廃止されました。

アップデート:

よく調べてみると、テーブルが画面の右側からはみ出しているという問題があります。TableLayout定義を次のように変更します。

<TableLayout
    android:id="@+id/info_table"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="5px"
    android:paddingTop="10px"
    android:shrinkColumns="1">

その問題を修正する必要があります。次に、上で言ったことを実行して、TextView.

于 2009-09-15T01:32:32.607 に答える
7

スティーブと同じ結果が得られました。

android:ellipsize = "marquee" android:scrollHorizo​​ntally = "true" android:lines = "1"

完璧に動作します

于 2010-11-18T01:32:18.573 に答える
4

試す...

すなわち

android:ellipsize="marquee"
android:focusable="true" android:marqueeRepeatLimit="num|marquee_forever"
android:lines="1" android:focusableInTouchMode="true"
android:scrollHorizontally="true"

マーキーは、 http://code.google.com/p/android/issues/detail?id=5364のコメント #2 に従ってビューが選択またはフォーカスされている場合にのみ機能するため

于 2010-04-02T19:01:57.203 に答える
1

これらの 3 つの問題 (閉じたものと再度開いたもの) と以前の投稿を確認した後、キーは TextView を外側の LinearLayout (または使用している他のレイアウト) でラップし、外側のレイアウト幅の「 layout_width 」を設定することだと思いますTextViewに含まれるテキストの長さより少し小さいです。「android: ellipsize 」を適切に動作させるには、幅を制限する必要があるようです

この問題のヒントに従って、ハッキングのためにこれらすべての属性を追加した後、たとえば、外側の LinearLayout の layout_width を 240dp に設定します。

<Linearlayout
  android:layout_width="240dp"
  android:layout_height="wrap_content"
  ...>

    <TextView
     ....
     android:singleLine="true"
     android:lines="1"
     android:maxLines="1"
     android:scrollHorizontally="true"
     android:ellipsize="end"
     android:text="this is a text which length should be longer than 240dp"
    />
</LinearLayout>

「...」を表示する TextView の最後を正常に作成できるよりも、あまり受け入れられませんが、機能します! また、通常の TextView で使用する場合でも、List Adapter の TextView で使用する場合でも機能すると思います。

これが結果のスクリーンショットです!

それが役立つことを願っています^^

これらの 3 つの問題の参照:

問題882

問題 10554

問題 31229

于 2012-10-23T15:08:07.330 に答える
1

作成したカスタム ViewGroup 内に TextView を配置する場合、測定後に寸法を変更した場合は、必ず再度測定してください。

たとえば、onLayout で新しいディメンションを計算しました。child.layout を呼び出す前に、

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));
于 2015-04-16T21:17:05.120 に答える