1. ホーム
  2. android

[解決済み] ListViewの最終要素に下マージンを追加する

2023-05-02 14:53:44

質問

ListViewに複雑なアイテムを追加したいのですが、背景が偶数/奇数で異なり、上下の角が丸くなっているものを追加したいです。以下のような感じです。

ここまでのことはlevel-listで実装しましたが、もう一つやりたいことがあります。 現在、一番下の項目が画面の底に近いところにあります。少しスペースを空けた方が良いと思います。

ListViewに下マージンを追加したくないので、最後のアイテムにだけマージンが必要です。

これを行うために私が見る方法。

フッター

ListViewに空のTextViewでフッターを追加するハックのようなものです。しかし、フッターは非常に不安定なもので、通常notifyDataSetChangedの後に消えてしまい、それを取り戻す方法はありません。

透明なピクセルを持つ画像

デザイナーに頼んで、下部の背景リソースに透明なピクセルを追加してもらいました。残念ながら、この場合、垂直方向のセンタリングが完全に崩れてしまいます。 例えば、このような9patchがあります。

とこんな感じのレイアウト。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
        >
    <!-- View with background with transparent pixels on bottom -->
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
                  android:id="@+id/item"
                  android:background="@drawable/some_bgr"
                  android:padding="10dp"
            >
        <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"
                  android:text="Title"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:text="Detail"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
    </LinearLayout>

    <!-- Just for marking place took by view -->
    <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
                 android:layout_below="@id/item"
                 android:background="#88ff55"
            />
</RelativeLayout>

その結果

ご覧の通り、センタリングが効きません。残念です。 (ちなみに、この9patchをTextViewの背景に指定すると、センタリングがうまくいくそうです。もし、このことを説明した記事をご存知でしたら、教えてください)

Adapterの実装で最後のアイテムに下マージンを追加する

これでうまくいくはずなのですが、どういうわけかまだうまくいきません。 この方法は好きではありません。なぜなら、コード内で寸法を変更するのが好きではないからです。

ということで

特定のビットマップとマージンを持つ XML drawable を作成する、という想像上の方法は既にあります。drawable の概念によれば、それは可能であるべきですが、私は実装を見つけることができません。もしかしたら、誰かが知っているかもしれません。

他のアイデアは?

どのように解決するのですか?

あなたの ListView を設定します。 paddingBottomclipToPadding="false" .

  <ListView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:paddingBottom="8dp"
      android:clipToPadding="false"
      android:scrollbarStyle="outsideOverlay"/>

  • これは RecyclerView .

  • のみを使用します。 android:scrollbarStyle="outsideOverlay" は、スクロールバーがパッドされた領域からはみ出さないようにしたい場合にのみ使用してください。