私の問題はHow to get a layout where one text can grow and ellipsize, but not gobble up the other elements on the layoutに非常に似ていますが、そこで提案されているように TableLayouts を使用できない理由を以下で読んでください。
基本的に次のようなリストビュー行を作成しようとしています:
| | テキストビュー | ビュー 1 | ビュー 2 |
すべてのビューには、可変幅の要素が含まれています。TextView には ellipsize="end" が設定されています。ビュー 1 は TextView の左側に配置し、ビュー 2 は画面の右側に配置する必要があります。そのため、通常、View 1 と View 2 の間には空白があります。TextView 内のテキストが長くなると、TextView も大きくなり、空白がなくなるまで View 1 が右に押し出されます。次に、楕円サイズが開始され、TextView でテキストが切り取られ、最後に省略記号 ("...") が追加されます。
したがって、結果は次のようになります。
+----------------------------------------+
| short text [view1] [view2] |
+----------------------------------------+
| long text with ell ... [view1] [view2] |
+----------------------------------------+
私はもう試した:
- TableLayouts ですが、一部のデバイスではスクロールが非常に遅くなるようです。
- RelativeLayouts ですが、ビューが重なっているか、view1 または view2 が完全に消えてしまいました。
- ただし、TextView は常に画面の幅全体を占めるまで拡大するため、view1 と view2 が画面の外に押し出されます。
これは私が試したGridLayoutです:
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_gravity="left|fill_horizontal"
android:ellipsize="end"
android:singleLine="true"
android:text="Long text to demonstrate problem with TextView in GridLayout taking up too much space despite ellipsis" />
<TextView
android:layout_gravity="left"
android:text="(view1)" />
<TextView
android:layout_gravity="right"
android:text="(view2)" />
</GridLayout>
View 1 と View 2 は実際には TextView ではありません。単純化するために例で使用しています。
TableLayouts を使用せずにこれを達成する方法はありますか?
編集: 要求に応じて、RelativeLayout を使用してこれを解決しようとする試みを次に示します。この場合、TextView は画面の全幅を占有するため、view1 も view2 も表示されません。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/rl0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:ellipsize="end"
android:singleLine="true"
android:text="Long text to demonstrate problem with TextView in GridLayout taking up too much space despite ellipsis" />
<TextView
android:id="@+id/rl1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/rl0"
android:layout_marginLeft="10dp"
android:text="(view1)" />
<TextView
android:id="@+id/rl2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/rl1"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
android:text="(view2)" />
</RelativeLayout>