これは、AndroidのListViewのアイテムのレイアウトに関する非常に細かい質問です。
上部にタイトルバーがあり、画面の残りの部分を占めるListViewがあるアクティビティがあります。 ListViewを左、右、および上部に10dpのパディングで表示したいのですが、ListViewを上にスクロールすると、フェードしたEdgeの下で消える前に、上部の10dpのパディングをカバーしたいです。同様に、最後までスクロールすると、最後のリストアイテムが画面の実際の最下部と最後のリストアイテムの間に10dpで表示されます(理由が分からない場合は、きれいな背景画像があるためですListViewの周りを突く)。
ListView自体にパディングを追加しようとしましたが、リストをスクロールすると、パディングのEdgeの下にリストが表示されなくなります。
私はWeb開発の経験があり、類推は最初のリスト項目の上(および最後のリスト項目の下)にマージンを追加することです。
あなたが書いた:
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:clipToPadding
は ViewGroup
のXML属性であり、レイアウトおよびビューコンテナの基本クラスです。
関連する メソッド呼び出し は次のとおりです。
public void setClipToPadding (boolean clipToPadding)
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ピクセルのヘッダーとフッターのパディングがあります。
@Jakobudの答えへの追加...
私のlistViewは、すでに_Android:divider/Android:dividerHeight
_プロパティを使用して、listViewアイテム間に透過的なギャップを作成していました。これにより、単に_Android:headerDividersEnabled
_および_Android:footerDividersEnabled
_プロパティを追加し、ヘッダービューとフッタービューをnew View(Activity.this)
に設定することができました。
ListViewで既に仕切りが設定されている場合の単純化。
@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);