web-dev-qa-db-ja.com

androidのリストビュー項目のマージン

ListViewアイテムにマージンを追加しようとしています(無駄に)。以下のRelativeLayoutにマージン値を追加しようとしましたが、何をしても、各アイテム間に1pxの行があります。

私が本当に欲しいのは、各アイテムの角を丸くし、1pxの黒の境界線と、左、上、右の3-5pxのマージンがあることですが、今は各アイテムの周囲にマージンを設定します:-)

どうすれば目標を達成できますか?とりあえず余白... ;-)

私が持っているものは次のとおりです。

PDATE:メインレイアウトとフラグメントレイアウトを削除して、以下のxmlを更新しました。また、ListViewのアイテムレイアウトを、現在のレイアウトに更新しました。これは、希望に近いものの、まだ完璧ではありません。スクリーンショットも追加されました

リストビューアイテムレイアウトxml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:paddingLeft="@dimen/matchMargin"
Android:paddingRight="@dimen/matchMargin"
Android:paddingTop="@dimen/matchMargin" >

<RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="#cfcfcfcf" >

    <include
        Android:id="@+id/matchKampstart"
        layout="@layout/kampstart_layout" />

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@id/matchKampstart"
        Android:layout_marginTop="@dimen/belowKampstartMargin" >

        <ImageView
            Android:id="@+id/tournamentImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:adjustViewBounds="true"
            Android:contentDescription="@string/tournamentImageViewContentDescription"
            Android:gravity="left"
            Android:src="@drawable/sofabold_launcher" />

        <ImageView
            Android:id="@+id/homeTeamImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:adjustViewBounds="true"
            Android:contentDescription="@string/homeTeamImageViewContentDescription"
            Android:src="@drawable/sofabold_launcher" />

        <TextView
            Android:id="@+id/homeTeam"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:text="@string/home"
            Android:textSize="14sp"
            Android:textStyle="bold" />

        <TextView
            Android:id="@+id/dash"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:gravity="center"
            Android:text="@string/dash"
            Android:textSize="12sp"
            Android:textStyle="bold" />

        <ImageView
            Android:id="@+id/awayTeamImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:layout_marginRight="2dp"
            Android:adjustViewBounds="true"
            Android:contentDescription="@string/awayTeamImageViewContentDescription"
            Android:src="@drawable/sofabold_launcher" />

        <TextView
            Android:id="@+id/awayTeam"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:gravity="center"
            Android:text="@string/away"
            Android:textSize="14sp"
            Android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentRight="true"
        Android:layout_below="@id/matchKampstart"
        Android:layout_marginTop="@dimen/belowKampstartMargin" >

        <ImageView
            Android:id="@+id/tvChannelImageView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:adjustViewBounds="false"
            Android:contentDescription="@string/tvChannelImageViewContentDescription"
            Android:gravity="right"
            Android:src="@drawable/sofabold_launcher" />
    </LinearLayout>

</RelativeLayout>

</RelativeLayout>

これにより、次のことがわかります。各アイテムの左右に非常に小さな線があります。私も取り除きたいと思います。

enter image description here

29
CJe

私はレイアウトが苦手ですが、過去にListViewの行がLayoutParamsを無視することが多いことに気付きました。私はこれがどこで起こるのか分かりません、またはオーバーライドすることが可能であれば、別のレイアウトを追加することで簡単に回避できることを知っています:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="?android:attr/listPreferredItemHeight"
    Android:background="#990000ff" >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_marginRight="10dp"
        Android:layout_marginTop="10dp"
        Android:background="#9900ff00"
        Android:paddingLeft="10dp" >

        <TextView
            Android:id="@+id/text"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#99ff0000" />
    </LinearLayout>

</LinearLayout>

通常、子が1つしかないレイアウトは削除できますが、これを見るとわかるように、これには目的があります。

Screen Shot

一番外側のレイアウトは青、TextViewは赤、緑は余分な間隔を追加できる追加のレイアウトです。パディング(左側の緑)とマージン(右側の緑なし)の違いに注意してください。マージンを使用することを明確に述べています(Android:layout_margin)しかし、コードは明らかにパディング(Android:padding)私は両方を含めました。

65
Sam

これは少し遅れて見えますが、ListView xml要素に次の行を追加するだけです

Android:divider="#00000000"
Android:dividerHeight="10dp"
17
Zac Sweers

理由については、こちらの回答をご覧ください。要するに、子は親に尋ね、リストビューの行はAbsListView.LayoutParams、マージンは含まれません。

ListViewの行ビューとして使用する場合、LinearLayoutのマージンが無視される理由

12
user1978019

アダプターで、getView()で相対レイアウトをキャッチし、レイアウトparamsを指定します。

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)view.getLayoutParams();
params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom
YourRelativeLayoutInAdapter.setLayoutParams(params);
4
Talha

XMLファイルのどこかにListViewが定義されていると思います。もしそうなら、paddingを追加して、画面の端とListViewの間にスペースを空けることができます。 。

例:

<ListView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:padding="15dp"/>
1
New2HTML