以下の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>
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
を楕円化します。
非推奨のプロパティを使用しない場合、次の行は私にとってはうまくいきます
Android:ellipsize="end"
Android:lines="1"
Android:scrollHorizontally="true"
ref http://code.google.com/p/Android/issues/detail?id=882#c9
私はスティーブと同じ結果が得られました:
Android:ellipsize = "Marquee" Android:scrollHorizontally = "true" Android:lines = "1"
完全に機能する
やってみて...
つまり.
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
これらの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でも使用できると思います。
これが結果のスクリーンショットです。
これら3つの問題の参照:
この属性のどこかを見つけました
<TextView ...
Android:singleLine="true"
Android:ellipsize="Marquee" />
私には問題なく動作します(Android 1.5)
私にとって、これらの属性は機能しました。 API 8以降でテストしました
XMLで
<TextView
....
Android:maxLines="1"
Android:scrollHorizontally="true"
Android:ellipsize="end"
....
/>
プログラム的に
setMaxLines(1);
setEllipsize(TruncateAt.END);
setHorizontallyScrolling(true);
作成したカスタムViewGroup内にTextViewを配置した場合、測定後に寸法を変更した場合は、必ず再度測定してください。
たとえば、onLayoutで新しいディメンションを計算しました。 child.layoutを呼び出す前に、
measureChild(child,
View.MeasureSpec.makeMeasureSpec(childWidth, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(childHeight, View.MeasureSpec.EXACTLY));
リサイクラビューカードでも同じ問題がありました。私は次のコードを追加することでこれを解決しました:
<TextView
Android:ellipsize="end"
Android:maxLines="1"/>