ListViewの最後の要素に下マージンを追加する


82

複雑なアイテムの背景を持つListViewを追加するには、追加する必要があります。上下の角が偶数/奇数と丸みを帯びている場合が異なります。次のようになります。

ListViewトップ

私はこれらすべてをレベルリストを介して実装しましたが、もう1つやりたいことがあります。これで、一番下の項目が画面の下部近くにあります。スペースを追加することをお勧めします。

ListViewの下部が良くないようです

ListViewに下マージンを追加したくありません。最後のアイテムにのみマージンが必要です。

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

フッター

一種のハック–空のTextViewを持つフッターをListViewに追加します。ただし、フッターは非常に不安定なものであり、通常、notifyDataSetChangedの後に消え、元に戻す方法はありません。

透明ピクセルの画像

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

9パッチ

そしてこのようなレイアウト:

<?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>

結果:

結果

ご覧のとおり、センタリングは機能していません。残念ながら。(ところで、この9パッチをTextViewの背景として指定すると、センタリングがうまく機能します。これを説明する記事を知っている場合は、私に知らせてください。)

アダプタ実装の最後の項目に下マージンを追加します

それはうまくいくはずですが、理由は不明ですが、それでもうまくいきません。コード内のディメンションを変更するのが好きではないので、この方法は好きではありません。

そう

すでに想像上の方法があります。特定のビットマップとマージンを使用してXMLドローアブルを作成します。ドローアブルの概念によれば、それは可能であるはずですが、実装が見つかりません。誰かが知っているかもしれませんか?

他のアイデアはありますか?


最後のアイテムの後にマージンを追加したいだけですか?
グーフィー

はい。質問はまさにこのように聞こえます
darja 2013

以下の私の答えを確認してください
グーフィー

私は実際にフッターアプローチの使用を検討します。特にへの呼び出し後ではなく、それらが自然に消えるのを見たことがありませんnotifyDataSetChanged()。それが起こっている場合、あなたは何か他の間違ったことをしているかもしれません。フッターはによって管理され、ListViewアダプターの実際のデータセットとはほとんど関係がありません。
MH。

最良の方法は、[あるstackoverflow.com/questions/6288167/... [1]:stackoverflow.com/questions/6288167/... それは本当に私を助けた
Bunyod

回答:


280

あなたには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"スクロールバーがパッド領域にオーバーフローしないようにする場合にのみ使用してください。


下から8dpがクリップされています...実際には、最後のアイテムにのみ8dpの下が必要です。
エリザベス

2
@AndroidBeginner何が欲しいのかわかりません。それはまさにこれが行うことです。
時計職人2015

12
android:scrollbarStyle="outsideOverlay"スクロールバーがパディング内に留まらないように追加することを忘れないでください
gfpacheco 2015年

1
色に問題があるかもしれません。下部のパディングには、最後のアイテムの背景色ではなく、リストビューの背景色があります
grine4ka 2015

これを使用してSwipeRefreshLayout更新インジケーターを管理できますか?
Hemant Kaushik 2017

8

次のように、リストに空のフッターを追加します。

TextView empty = new TextView(this);
empty.setHeight(150);
listview.addFooterView(empty);

そのために私はお勧めします:listview.addFooterView(empty、data:null、isSelectable:false);
サイモン

4

必要に応じてコードから実行することもできます。たとえば、ここではEditTextのさまざまな状況に対応します。

   if(s.toString().length()>0)
   {
      contacts_lv.setClipToPadding(false);
      contacts_lv.setPadding(0,0,0,270*screenDensity);
   }
   else
   {
      contacts_lv.setClipToPadding(true);
      contacts_lv.setPadding(0,0,0,0);
   }

2

Clocksmithの答えは最高でかなり賢いです。空のフッタービューを作成することもできます。


1
最初の解決策は機能しませんでしたが、あなたの提案は機能しました。確かに良い考えです。ありがとうございます
Badr 2015年


0

別の解決策は、特定の高さでモックビューを作成することです。

getViewCountのアダプタで2を返します。

getCountでyourData.size + 1を返します。

getViewTypeで、要素が最後の要素であるかどうかを確認しますreturn 2;

getViewでこのタイプを使用して、モックビューにデータを入力します。


-2

最後のアイテムにのみマージンを追加したいと思います。

したがって、この方法で、getviewメソッドでリストアイテムのインデックスを作成し、最後のアイテムかどうかを確認してから、プログラムでビューにマージンを追加できます。


この方法については、「アダプタ実装の最後の項目に下マージンを追加する」で説明しました。もっとエレガントな方法があるのだろうか。
darja 2013

なぜあなたはこのようにしたくないのですか?
グーフィー

問題の説明を参照してください。
darja 2013

他のアイデアは-そう唯一の方法であると思わない
darja

@Goofyリストの最後の行ビューにマージンを追加するにはどうすればよいですか?
vrunoa 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.