web-dev-qa-db-ja.com

Androidリストビューの高さを移動せずにコンテンツのリストビューのパディング?

内部にたくさんのアイテムがあるListViewがあります。上部と下部のアイテムに上部アイテムの上部マージンを10 dp、下部アイテムの下部マージンを10 dpにするにはどうすればよいですか?これで、ListViewのパディングまたはマージンを使用してこれを行うことができますが、結果として、ListViewのEdgeをスクロールすると、画面の下部から10 dpになります。とにかくこれの周り?また、アダプターのgetViewメソッド内でマージンを設定しようとしましたが、AbsListView.LayoutParamsのマージンオプションが表示されません。どんな助けでも素晴らしいでしょう。

ありがとう

36
Bobbake4

コツは、ビュー定義にAndroid:clipToPadding="false"を含めることです。例:

<ListView Android:id="@+id/list"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingTop="16dip"
    Android:paddingBottom="16dip"
    Android:clipToPadding="false" />
125
adamp

ヘッダーとフッターを使用して、スクロール領域内のListViewの上部と下部にスペースを確保できます。ここに簡単な例があります:

Header_footer.xmlという名前のフィラービューを定義します。

<?xml version="1.0" encoding="utf-8"?>
<View xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="10dp"/>

リストビューにonCreateという名前を付けたとすると、listViewメソッドは次のようになります。

    final LayoutInflater inflater = 
        (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View headerFooter = inflater.inflate(R.layout.header_footer, null);
    listView.addFooterView(headerFooter);
    listView.addHeaderView(headerFooter);

次に、アダプターを設定します。

12
Craigy

リストのサイズに対するアイテムの位置を確認しないでください。

パディング:

 public View getView(int position, View convertView, ViewGroup parent)
    {
         //recycle views and whatever else you normally would do goes here..
         //...
         //...

         if (position == 0){
            convertView.setPadding(0, 10, 0, 0); //padding on top for top item
         }
         else if (position == getCount() - 1){
            convertView.setPadding(0, 0, 0, 10); //padding on bottom for bottom item
         }
         else{
            convertView.setPadding(0, 0, 0, 0); //no padding
         }
}

マージンの使用

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(left, top, right, bottom);
convertView.setLayoutParams(lp);

例:

public View getView(int position, View convertView, ViewGroup parent)
    {
             //recycle views and whatever else you normally would do goes here..
             //...
             //...
             LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,        LinearLayout.LayoutParams.WRAP_CONTENT);
             if (position == 0){
                 lp.setMargins(0, 10, 0, 0); //margin on top for top item
             }
             else if (position == getCount() - 1){
                lp.setMargins(0, 10, 0, 10); //margin on bottom for bottom item
             }
             else{
                lp.setMargins(0, 0, 0, 0); //no margin
             }
             convertView.setLayoutParams(lp);
    }

これは、getCount()メソッドをアダプターに適切に実装した場合に提供されます。

5
dymmeh