web-dev-qa-db-ja.com

Androidでリストビューの一番上のアイテムの上(そして最後の下)にマージンを追加します

これは、AndroidのListViewのアイテムのレイアウトに関する非常に細かい質問です。

上部にタイトルバーがあり、画面の残りの部分を占めるListViewがあるアクティビティがあります。 ListViewを左、右、および上部に10dpのパディングで表示したいのですが、ListViewを上にスクロールすると、フェードしたEdgeの下で消える前に、上部の10dpのパディングをカバーしたいです。同様に、最後までスクロールすると、最後のリストアイテムが画面の実際の最下部と最後のリストアイテムの間に10dpで表示されます(理由が分からない場合は、きれいな背景画像があるためですListViewの周りを突く)。

ListView自体にパディングを追加しようとしましたが、リストをスクロールすると、パディングのEdgeの下にリストが表示されなくなります。

私はWeb開発の経験があり、類推は最初のリスト項目の上(および最後のリスト項目の下)にマージンを追加することです。

143
Mick Byrne

あなたが書いた:

ListView自体にパディングを追加しようとしましたが、リストをスクロールすると、パディングのEdgeの下にリストが表示されなくなります。

セットする ListView's clipToPadding falseの属性。これにより、ListViewの周囲のパディングが有効になります そして (パディングのエッジだけでなく)レイアウトの最後までスクロールします。

例:

<ListView
    Android:id="@+id/list_view"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:divider="@Android:color/transparent"
    Android:dividerHeight="10.0sp"
    Android:padding="16dip"
    Android:clipToPadding="false"/>

Android:clipToPaddingViewGroup のXML属性であり、レイアウトおよびビューコンテナの基本クラスです。

関連する メソッド呼び出し は次のとおりです。

public void setClipToPadding (boolean clipToPadding)
391
Gunnar Karlsson
View padding = new View(this);
padding.setHeight(20); // Can only specify in pixels unfortunately. No DIP :-(

ListView myListView = (ListView) findViewById(R.id.my_list_view);

myListView.addHeaderView(padding);
myListView.addFooterView(padding);

myListView.setAdapter(myAdapter);

上記のListViewには、20ピクセルのヘッダーとフッターのパディングがあります。

19
Jake Wilson

@Jakobudの答えへの追加...

私のlistViewは、すでに_Android:divider/Android:dividerHeight_プロパティを使用して、listViewアイテム間に透過的なギャップを作成していました。これにより、単に_Android:headerDividersEnabled_および_Android:footerDividersEnabled_プロパティを追加し、ヘッダービューとフッタービューをnew View(Activity.this)に設定することができました。

ListViewで既に仕切りが設定されている場合の単純化。

10
greg7gkb

@Jakobudと@ greg7gkbによるソリューションに基づいて、 ListFragment を使用する私のソリューション。

ListView listView = getListView();
listView.setDivider(null);
listView.setDividerHeight(getResources().getDimensionPixelSize(R.dimen.divider_height));
listView.setHeaderDividersEnabled(true);
listView.setFooterDividersEnabled(true);
View padding = new View(getActivity());
listView.addHeaderView(padding);
listView.addFooterView(padding);
2
hleinone