複雑なアイテムの背景を持つListViewを追加する必要があります:偶数/奇数、および上部と下部の丸いコーナーで異なります。次のようになります。
Level-listを介してこれらすべてを実装しましたが、もう1つやりたいことがあります。これで、下部のアイテムは画面の下部近くにあります。スペースを追加することをお勧めします。
ListViewに下マージンを追加したくありません。最後のアイテムにのみマージンが必要です。
私がこれを行う方法:
ハッキングの一種–空のTextViewを含むフッターをListViewに追加します。しかし、フッターは非常に不安定なものであり、通常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の背景として指定すると、センタリングがうまく機能します。これを説明する記事を知っているなら、私に知らせてください。)
それは動作するはずですが、理由は不明ですが、まだ動作しません。コードの次元を変更するのは好きではないので、この方法は好きではありません。
想像上の方法がすでにあります。特定のビットマップとマージンを使用して、いくつかのXMLドローアブルを構築します。ドロウアブルのコンセプトによれば、それは可能であるべきですが、私は実装を見つけることができません。誰かが知っているかもしれませんか?
他のアイデアはありますか?
ListView
で、paddingBottom
とclipToPadding="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"
を使用します。
次のようにリストに空のフッターを追加します。
TextView empty = new TextView(this);
empty.setHeight(150);
listview.addFooterView(empty);
必要に応じて、コードからそれを行うこともできます。たとえば、ここでは、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);
}
Clocksmithの答えは最高で、とても賢いです。空のフッタービューを作成することもできます。
別の解決策は、特定の高さでモックビューを作成することです。
アダプターのgetViewCountで2を返します。
GetCountにyourData.size + 1を返します。
GetViewTypeで、要素が最後の要素かどうかを確認し、2を返します。
GetViewでこのタイプを使用して、モックビューを作成します。
ListView XMLコードに次の2行を追加します。
Android:transcriptMode="alwaysScroll"
Android:stackFromBottom="true"