web-dev-qa-db-ja.com

EllipsizeがカスタムlistView内のtextViewで機能しない

以下の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> 
28
aspartame

Ellipsizeが壊れている(go バグレポートに投票 、特に再現できないと主張されているため)ため、マイナーなハックを使用する必要があります。使用する:

Android:inputType="text"
Android:maxLines="1"

楕円にしたいものは何でも。また、singleLineは使用しないでください。非推奨です。

UPDATE:

よく見ると、テーブルが画面の右側からはみ出しているという問題があります。 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を楕円化します。

24
Jeremy Logan

非推奨のプロパティを使用しない場合、次の行は私にとってはうまくいきます

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

ref http://code.google.com/p/Android/issues/detail?id=882#c9

40
tbruyelle

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

Android:ellipsize = "Marquee" Android:scrollHorizo​​ntally = "true" Android:lines = "1"

完全に機能する

7
Andy Cochrane

やってみて...

つまり.

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

4
hwii77

これらの3つの問題(クローズおよび再開)と以前の投稿を確認した後、重要なのは、TextViewを外側のLinearLayout(または使用している他のレイアウト)でラップし、「layout_width "少し外側のレイアウト幅[〜#〜]小さい[〜#〜] TextViewに含まれるテキストの長さよりも。 「Android:ellipsize」が適切に動作するようにするには、幅を[〜#〜] limit [〜#〜]にする必要があります。

この問題 のヒントに従い、ハッキングのためにこれらのすべての属性を追加した後、外側の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でもリストアダプターのTextViewでも使用できると思います。

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

hope it helps ^^

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

課題882

問題10554

問題31229

1
Robert

この属性のどこかを見つけました

<TextView ...
Android:singleLine="true"
Android:ellipsize="Marquee" />

私には問題なく動作します(Android 1.5)

0
molokoloco

私にとって、これらの属性は機能しました。 API 8以降でテストしました

XMLで

<TextView
 ....
 Android:maxLines="1"
 Android:scrollHorizontally="true"
 Android:ellipsize="end"
 ....
/>

プログラム的に

setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);
0
Shan Xeeshi

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

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

measureChild(child,
    View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
    View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));
0
Helin Wang

リサイクラビューカードでも同じ問題がありました。私は次のコードを追加することでこれを解決しました:

    <TextView
        Android:ellipsize="end"
        Android:maxLines="1"/>
0
Shri