5

たくさんListViewの宿題を表示するがあります。ListViewアイテムはaを使用してFrameLayout2を配置しTextViewsます。1つ目TextViewは左に配置され、2つ目は右に配置されます。(どちらも中央に垂直に配置されます。)1つ目は割り当ての説明のスニペットを表示し、2つ目は期日を表示します。

私がやりたいのは、期日が必要なだけのスペースを占め、説明が残りのスペースを埋めるようにすることです。

| -------------------------------------------------- --- |
| 15〜35ページを読んで、タイミングを更新してください...5月4日金曜日|
| -------------------------------------------------- --- |

現在、説明テキストは日付と重複し続けます。ただし、行の終わりで切り捨てられます。

とにかくこれをXMLで実行できますか、それともTextView値を設定する前に(おそらくgetView呼び出しで)文字列を短縮してコードで実行する必要がありますか?コードでそれを行った場合、文字列が占める水平方向のスペースの量を計算して、説明をどれだけ短くする必要があるかを計算する必要があります。それは厄介になる可能性があるようです...

これを達成する方法に関する他の提案は大歓迎です!

4

4 に答える 4

12

次のようなellipsize属性を使用してみてください:

<TextView android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:ellipsize="end"
      android:singleLine="true"/>

Android、または少なくとも一部のバージョンでは、システムが実際に切り捨てを実行して省略記号を追加するために、「ellipsize」属性と「singleline」属性の両方が必要であることに注意してください。

于 2012-05-03T20:29:12.663 に答える
7

FrameLayoutの代わりに、これは、ellipsizeと組み合わせたLinearLayoutまたはRelativeLayoutに最適な場所です。

<LinearLayout
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >

  <TextView
    ...
    android:width="0dp"
    android:height="wrap_content"
    android:layout_weight="1" 
    android:ellipsize="end" />

  <TextView
    ...
    android:width="wrap_content"
    android:height="wrap_content"
    android:layout_weight="0" />

</LinearLayout>

または交互に

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >

  <TextView
    ...
    android:id="@+id/secondTV"
    android:width="wrap_content"
    android:height="wrap_content"
    android:layout_weight="0" />

  <TextView
    ...
    android:width="0dp"
    android:height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@id/secondTV" 
    android:ellipsize="end"/>

</RelativeLayout>
于 2012-05-03T20:32:18.350 に答える
1

FrameLayoutをLinearLayoutまたはRelativeLayoutに変更します。

  • LinearLayout:期日幅を「wrap_content」、説明幅を0dpにしてから、説明にlayout_weight="1"を追加します。

  • RelativeLayout:最初に幅wrap_contentを使用して期日をレイアウトし、次に期日の左側に配置するというルールを使用して説明をレイアウトします。

于 2012-05-03T20:33:02.993 に答える
1

アントンとJレイモンドの両方がほとんどオンでした(Jレイモンドは彼の例でそれを理解するのを手伝ってくれました)。これは私が思いついたものです:

<RelativeLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:id="@+id/due_date"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true"
            android:singleLine="true" />

        <TextView android:id="@+id/description"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/due_date"
            android:singleLine="true" />
</RelativeLayout>

(説明で参照できるように、最初に期日ラベルを宣言する必要がありました。また、android:ellipsizeはオプションのようです。デフォルトは「end」だと思います。)

本当にありがとう!

于 2012-05-05T19:32:24.430 に答える