web-dev-qa-db-ja.com

listViewアイテム間の間隔

私はlistView項目の間にスペースを作るためにlistViewでmarginBottomを使おうとしました、しかし、それでも項目は一緒に添付されます。

それも可能ですか?もしそうなら、それを行うための具体的な方法はありますか?

私のコードは下にあります

<LinearLayout
Android:id="@+id/alarm_occurences"
Android:layout_width="fill_parent" 
Android:orientation="vertical"
Android:layout_height="fill_parent"
Android:background="#EEEEFF"
xmlns:Android="http://schemas.Android.com/apk/res/Android">

<ListView
Android:id="@+id/occurences"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
/>
</LinearLayout>

私のカスタムリストアイテム:

<com.Android.alarm.listItems.AlarmListItem
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" 
Android:background="@drawable/alarm_item_background"
Android:layout_marginBottom="10dp"    
>
<CheckedTextView     
    Android:id="@Android:id/text1"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:gravity="center_vertical"
    Android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    Android:textSize="20sp"
    Android:textStyle="bold"
    Android:typeface="serif"
    Android:padding="10dp"

/>

</com.Android.alarm.listItems.AlarmListItem>

この場合、リスト項目間に間隔を空ける方法はありますか。

358
Sammy

@Asahiが頭を悩ませていましたが、後でGoogleにアクセスしている人のために少しXMLを追加したいと思いました。

<ListView Android:id="@+id/MyListView"
  Android:layout_height="match_parent"
  Android:layout_width="match_parent"
  Android:divider="@Android:color/transparent"
  Android:dividerHeight="10.0sp"/>

何らかの理由で、 "10"、 "10.0"、 "10sp"などの値がすべてdividerHeightの値としてAndroidによって拒否されます。浮動小数点数と "10.0sp"のような単位が必要です。 @Goofyaheadが指摘しているように、この値には表示に依存しないピクセル(つまり "10dp")も使用できます。

806
Nik Reiman

おそらく、dividerdividerHeight または ListView のプロパティーが問題を解決することができます。

60
Asahi

Nik Reimanによる解決策は機能しますが、やりたいことに最適な解決策ではないことがわかりました。マージンを設定するためにディバイダを使用すると、ディバイダが表示されなくなり、アイテム間の明確な境界を示すためにそれを使用することができなくなるという問題がありました。また、アイテムをクリック可能にしたい場合やアイテムが細い場合は、各アイテムに「クリック可能な領域」が追加されないため、仕切りによって追加された高さが異なるため、アイテムをクリックするのは難しくなります。アイテムの一部.

幸い、私はあなたが仕切りを見せることと、余白ではなくパディングを使って各アイテムの高さを調整することを可能にするより良い解決策を見つけました。これが一例です。

リストビュー

<ListView
Android:id="@+id/listView"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
/>

ListItem

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="10dp"
    Android:paddingTop="10dp" >

    <TextView
        Android:id="@+id/textView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:text="Item"
        Android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>
42
idunnololz

あなたはあなたのListView項目(例えばyour_listview_item)を他のレイアウト、例えばLinearLayoutでラップし、your_listview_itemにマージンを追加するべきです:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <your_listview_item
        Android:id="@+id/list_item"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_marginTop="5dp"
        Android:layout_marginBottom="5dp"
        Android:layout_marginLeft="5dp"
        Android:layout_marginRight="5dp"
    ...
    ...
    />
</LinearLayout>

これにより、必要に応じてListView項目の左右にスペースを追加することもできます。

17
Vasu

スペースを追加して水平線を維持するための私の解決策は、divider.xmlフォルダーにres/drawableを追加し、その中に線の形状を定義することでした。

divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="line" >

    <stroke
        Android:width="1px"
        Android:color="@color/Nice_blue" />

</shape>

それから私のリストで私は次のように私の分周器を参照します。

<ListView
    Android:id="@+id/listViewScheduledReminders"
    Android:layout_width="match_parent"
    Android:layout_height="0dip"
    Android:layout_marginBottom="@dimen/mediumMargin"
    Android:layout_weight="1"
    Android:divider="@drawable/divider"
    Android:dividerHeight="16.0dp"
    Android:padding="@dimen/smallMargin" >

</ListView>

この高さを増減してAndroid:dividerHeight="16.0dp"に注意してください。私は基本的に分割線の上下にパディングを追加しています。

私は参照のためにこのページを使用しました: http://developer.Android.com/guide/topics/resources/drawable-resource.html#stroke-element

11
kamelnyc

余白と引き伸ばさずに区切り線を表示したい場合 - InsetDrawableを使用します(サイズは@Nik Reimanが言っている形式でなければなりません)。

リストビュー:

<ListView
    Android:id="@+id/listView"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:cacheColorHint="#00000000"
    Android:divider="@drawable/separator_line"
    Android:dividerHeight="10.0px"/>

@ drawable/separator_line:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:insetLeft="5.0px"
    Android:insetRight="5.0px"
    Android:insetTop="8.0px"
    Android:insetBottom="8.0px">

    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:shape="rectangle">
        <gradient
            Android:startColor="@color/colorStart"
            Android:centerColor="@color/colorCenter"
            Android:endColor="@color/colorEnd"
            Android:type="linear"
            Android:angle="0">
        </gradient>
    </shape>
</inset>
8
LionKing

あなたが使用することができます:

Android:divider="@null"
Android:dividerHeight="3dp"

例:

<ListView
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:id="@+id/listView" Android:layout_gravity="center_horizontal"
        Android:dividerHeight="3dp"
        Android:divider="@null" Android:clickable="false"/>
7
mspapant

答えがすでに選択されていることを私は認識していますが、私はこの問題に遭遇したときに私のために働いてしまったものを共有したいと思いました。

私はlistViewの各エントリがそれ自身のレイアウトによって定義されているlistViewを持っていました、サミーが彼の質問で投稿したものと同じです。デバイダの高さを変更するという提案されたアプローチを試してみましたが、目に見えないデバイダを使っていても、見た目がきれいになりすぎませんでした。いくつか実験した後、個々のlistViewエントリを定義するXMLファイルの最後のTextViewレイアウト要素に単にAndroid:paddingBottom="5dip"を追加しました。

これにより、Android:layout_marginBottomを使用して達成しようとしていたことが正確に得られました。私はこの解決策がデバイダの高さを増やそうとするよりも美的に好ましい結果を生み出すことを発見しました。

5
Tim Severeijns

マージンを与える代わりに、パディングを与えるべきです:

<ListView
    Android:id="@+id/listView1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:divider="@Android:color/green"
    Android:dividerHeight="4dp"
    Android:layout_alignParentTop="true"
    Android:padding="5dp" >

</ListView>

OR

<ListView
    Android:id="@+id/listView1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentTop="true"
    Android:paddingTop="2dp"
    Android:divider="@Android:color/green"
    Android:dividerHeight="4dp"
    Android:paddingLeft="1dp"
    Android:paddingRight="1dp"
    Android:paddingBottom="2dp"
    Android:paddingStart="0dp"
    Android:paddingEnd="0dp" >

</ListView>
4
Rahul Raina

OPの既存のコード(リスト項目に既にパディングがある)を使用した最も簡単な解決策は、以下のコードを追加することです。

listView.setDivider(new ColorDrawable(Color.TRANSPARENT));  //hide the divider
listView.setClipToPadding(false);   // list items won't clip, so padding stays

この SO回答は私の役に立ちました。

注意: こちらの に尋ねられているように、古いプラットフォームではリスト項目のリサイクルが早すぎるというバグに直面するかもしれません。

3
Sufian

私のアプリケーションでは、私はこのようにしました

 <ListView
    Android:id="@+id/staff_jobassigned_listview"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:divider="@null"
    Android:dividerHeight="10dp">

</ListView>

ちょうどset the divider to nullと分割線に高さを提供することは私のためにしました。

例:

Android:divider="@null"

または

Android:divider="@Android:color/transparent"

これは結果です

enter image description here

3
Sagar Pawar
<ListView
    Android:clipToPadding="false"
    Android:paddingTop="10dp"
    Android:paddingBottom="10dp"
    Android:dividerHeight="10dp"
    Android:divider="@null"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
</ListView>

すべての要素間の間隔とリストの上部と下部の間隔を等しくするには、paddingToppaddingBottom、およびdividerHeightを同じ値に設定します。

私はclipToPaddingfalseに設定して、ビューをこのパディング領域に描画できるようにします。

リスト要素間の行を削除するには、divider@nullに設定します。

2
Andrew Gallasch

また、リスト項目間の間隔を広げるもう1つの方法は、layout_height属性に必要な間隔を指定して、空のビューをアダプタコードに追加することです。例えばリストアイテム間の下部の間隔を広げるには、このダミービュー(空のビュー)をリストアイテムの末尾に追加します。

<View
    Android:layout_width="match_parent"
    Android:layout_height="15dp"/>

そのため、リストビュー項目間の下部間隔は15 dpになります。親レイアウトがLinearLayoutで方向が垂直の場合、または他のレイアウトに適切な手順を実行する場合は、これを直接追加できます。お役に立てれば :-)

2
FingerSmith

あなたはただ背景をリストデバイダの透明にしてあなたの必要なギャップに応じて高さを作る必要があります。

<ListView 
         Android:id="@+id/custom_list"
         Android:layout_height="match_parent"
         Android:layout_width="match_parent"
         Android:divider="#00ffffff"
         Android:dividerHeight="20dp"/>
2
pawan kumar

Horizo​​ntalListViewを使用している場合、仕切りがうまく機能していないように思われるため、あまり良くない解決策を見つけましたが、どちらの方法でもより一般的なListViewでうまくいくと思います。

追加するだけです:

<View
Android:layout_marginBottom="xx dp/sp"/>

一番下のレイアウトビューのアダプタクラスで展開すると、アイテム間に間隔ができます。

1
Juliagu

ListView内のビュー間の間隔をあけるために、あなたの膨張するビューにパディングを使ってください。

あなたのリストビュー内で膨らませているビューにAndroid:paddingBottom="(number)dp" && Android:paddingTop="(number)dp"を使うことができます。

分割線の解決策はただの修正です。いつか分割線の色(今は透明になります)を使いたいとき、分割線が引き伸ばされているのがわかるでしょう。

1
Avi Levin

これらの解決策の多くはうまくいきます。しかし、必要なのがアイテム間のマージンを設定できるようにするには、私が思いついた最も簡単な方法は、アイテム(あなたの場合はCheckedTextView)をLinearLayoutにラップし、その中にアイテムのマージンフォーマットを入れることですルートレイアウトではありません。このラッピングレイアウトに必ずIDを付けて、アダプタのCheckedTextViewと共に作成してください。

それでおしまい。実際には、ListViewのアイテムレベルで余白をインスタンス化しています。 ListViewはアイテムのレイアウトを認識しないため、アダプタのみが認識します。これは基本的に、以前は無視されていたアイテムレイアウトの部分を膨らませます。

1
jwehrle