12

リストビューの各項目の間にパディングを追加したいのですが、見た目が良いと思うので、デフォルトの仕切りを維持したいと思います。より広いものは醜く見えます。

私は現在持っています:

<com.example.practice.MyListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:layout_below="@id/name" />

ここで、透明な仕切りを使用してみました。これは、必要な間隔を確保することに成功しましたが、小さな線が表示されません。そして、透明な仕切りを使用しないと、太くて醜い線ができてしまいます。デフォルトの行を表示したままにして、各リストビュー項目の上部にスペースを追加するだけです。

4

7 に答える 7

31

その場合、あなたが望むものをそれほど単純に達成することはできません。

ステップ 1: 仕切りを透明に設定し、高さを少し大きくします。

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="8dp"/>

ステップ 2: 「小さな線」効果を実現するために、リスト ビュー アイテムの背景としてカスタム ドローアブルを追加できます。たとえば、リスト ビュー アイテムが「list_item.xml」として定義されているとします。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
<-- Add a Custom background to the parent container of the listview items -->
android:background="@drawable/list_item_selector"
android:orientation="vertical" >
<-- Rest of the item layout -->
</LinearLayout>

もちろん、そのアイテムは好きなものでかまいません。私のものは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item>
  <shape 
    android:shape="rectangle">
        <stroke android:width="1dp" android:color="@color/bg_gray" />
        <solid android:color="@android:color/white" />
    </shape>
</item>
<item android:bottom="1dp"> 
    <shape 
        android:shape="rectangle">
        <stroke android:width="1dp" android:color="#FFDDDDDD" />
        <solid android:color="#00000000" />
    </shape>
</item>
</layer-list>

しかし、それでは「ホロセレクター」効果が無効になり、リストビューのアイテムをクリックまたはハイライトすると、その上にホロブルーの色が描画されます。レイヤー リスト ドローアブルでは、'list_item_selector' という名前のセレクターを使用しました。

押されていないときはレイヤ リスト ドローアブルを使用し、押されているときはホロブルーの色を使用するセレクタを次に示します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
    android:state_pressed="false"
    android:drawable="@drawable/list_item_bg2"        
    />
 <item android:state_pressed="true"
    android:drawable="@color/holo_blue"
    />
</selector>

コメントの編集

もちろん、リスト ビュー アイテムの高さを定義することもできますが、変更されない定義済みの高さではなく、最小の高さを設定することをお勧めします。

これが私のリスト項目のレイアウトだとしましょう:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/grid_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/grid_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/grid_image"
    android:minHeight="48dp"
    android:padding="8dp"
    android:textIsSelectable="false" />

</RelativeLayout>

必要なのは、

ステップ 1: 必要に応じて、values/ フォルダーに含まれる dimens.xml ファイルで、最小の高さまたは最大の高さを定義します。なんで?高さはレイアウトに基づいて確実に変化する必要があり、デバイス密度ごとに異なる dimens.xml を定義できるためです。

dimens.xml で、次のように言います。

<resources>

<!-- List Item Max and Min Height -->

    <dimen name="list_item_min_height">48dp</dimen>
    <dimen name="list_item_max_height">96dp</dimen>
    <dimen name="list_item_set_height">64dp</dimen>

</resources>

そして、LinearLayoutリスト項目のレイアウトの親にどちらの値でも使用します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/list_item_min_height" >

そのトピックはこれで終わりです。テキストを中央に配置すると、さらに簡単になります。

  • TextView を使用していて、RelativeLayout にラップされている場合は、次を使用します。android:layout_centerVertical="true"

  • LinearLayout を使用している場合は、次を使用します。android:layout_gravity="center_vertical"

:これは、高さを wrap_content に設定していない場合にのみ機能します。それ以外の場合は無関係です。

  android:gravity="center_vertical"

それが役立つことを願っています。

于 2013-05-15T03:15:22.550 に答える
1

あなたの質問を正確に理解しているかどうかわかりません。仕切りを透明にしたい場合は、それぞれの間の背景の平和が見えるListViewようにして、スクロール時に一種の 3D 効果を与えます。あなたはこのようにすることができます:

list_item xmlLinearLayoutで、たとえば必要な背景色を指定します。

<LinearLayout 
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="match_parent"    
android:padding="4dip"
android:orientation="horizontal"
android:background="#FFFFFF"
>

次に、ListView次のように背景色を指定します。

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentListView"
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dip"
android:background="#0000FF"
android:cacheColorHint="@android:color/transparent"
android:drawSelectorOnTop="true"
/>

今、ListViewあなたの背景をスクロールします

これがあなたの望むものであることを願っています。

于 2013-12-08T12:51:43.997 に答える
1

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

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

したがって、これにより、リスト ビュー アイテム間に 15 dp の下部スペースが提供されます。親レイアウトが LinearLayout で方向が垂直である場合、または他のレイアウトに適切な手順を実行する場合は、これを直接追加できます。お役に立てれば :-)

于 2015-08-28T08:47:07.600 に答える
0

これは、仕切りを表示したくないが、さらにスペースを追加したいという方のためのソリューションです。分割線を完全に取り除くには、分割線を @null に設定し、分割線の高さを 0dp に設定します。これは鉱山の一般的な ListView です。

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:layout_alignLeft="@+id/txtMake"
    android:layout_below="@+id/txtMake"
    android:fadeScrollbars="false"
    android:scrollbarThumbVertical="@drawable/scroll_bar_color"
    android:scrollbarStyle="outsideInset" >
</ListView>

次に、アダプターを使用してリストビューに入力する xml ファイルに移動します。コンテナー (Example RelativeLayout...) に移動し、以下を追加するだけです。

    android:layout_marginTop="15dp"

これにより、実際に仕切りを使用していない人のためにスペースが追加されます. ボックスのサイズを大きくするだけのパディングとは異なり、これにより各アイテム間の距離が長くなります。

于 2013-12-13T08:10:56.287 に答える