Як призначити заповнення рядку розділювача списку елементів перегляду


75

введіть тут опис зображення

Як я можу додати заповнення елементу списку, як я показую на зображенні. Я хочу зробити роздільник у макеті, як показано на зображенні.

це мій фрагмент коду списку

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp">

 <ListView 
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
     android:id="@+id/listV_main"
    android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"/>

Це мій код розділу списку

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="10dp"
android:paddingBottom="10dp">
<include
    android:id="@+id/list_item_section_text"
    layout="@android:layout/preference_category"
     />

Це мій код елемента списку

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:adjustViewBounds="true"
android:paddingRight="?android:attr/scrollbarSize"
   >
<ImageView
    android:id="@+id/showlist_item_entry_drawable"
    android:layout_width="82dp"
    android:adjustViewBounds="true"
    android:layout_height="68dp"
    android:scaleType="fitXY"
    android:paddingLeft="9dp"/> 
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="6dip"
    android:layout_marginTop="6dip"
    android:layout_marginBottom="6dip"
    android:layout_weight="1"
>
    <TextView android:id="@+id/list_item_entry_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal" /> 
    <TextView android:id="@+id/list_item_entry_summary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/list_item_entry_title"
        android:layout_alignLeft="@id/list_item_entry_title"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:singleLine="true"
        android:textColor="?android:attr/textColorSecondary" />
</RelativeLayout>


3
Просто короткий коментар щодо вашого методу getView - вам слід використовувати заданий convertView, а НЕ використовувати роздування щоразу, коли getView запускається.
Зордід

Відповіді:


215

Використовуйте 'inset' .....

(list_divider.xml)

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="50dp"
    android:insetRight="50dp" >

 <shape>
    <solid android:color="@color/orange" />
    <corners android:radius="2.0dip" />
</shape>

</inset>

і у вікні списку додайте ось так ...

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
    ...
/>

Ви можете встановити значення вставки за бажанням ...

ОНОВЛЕННЯ

Як вказував @Giulio Piancastelli, якщо фон контейнера списку відрізняється від фону елемента списку, ви можете використовувати 'шар-список' ...

(list_divider.xml)

  <?xml version="1.0" encoding="utf-8"?>
  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
   <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/list_background" />
        </shape>
    </item>


    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/divider_color"/>
        </shape>
    </item>

        </layer-list>

і у вікні списку додайте ось так ...

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/list_divider"
    ...
/>

1
Android дійсно потребує insetEnd = "@ dimen / inset_end" Якщо немає insetStart та insetEnd, це ускладниться.
Eric Cochran

3
Це не працює, коли фон контейнера списку відрізняється від фону елементів списку. Простір, залишений вставкою, є прозорим, коли він використовується як роздільник списку, тому через нього видно фон контейнера списку, замість того щоб плавно зливатися з фоном елементів списку. На відміну від layer-listбазового рішення, запропонованого десь ще на цій сторінці, я вважаю, що ваше рішення ніколи не могло б спрацювати в такому випадку.
Джуліо Піанкастеллі

18

Вам потрібна підкладка для роздільників? Створіть свою власну форму для малювання як:

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

    <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/black" />
        </shape>
    </item>

</layer-list>

І встановити як розділювач для вашого ListView у xml:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/custom_divider"
    ...
/>

UPD

Я просто ListViewв xml:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="2dp"
android:divider="@drawable/line"
/>

Розділювач, як line.xmlу drawable:

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
        android:left="10dp"
        android:right="10dp">
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>

Не вносити жодних змін ListViewу код. Ви можете спробувати скористатися Clean, якщо ресурси будуються неправильно.


що таке custom_color ?? і мені доводиться створювати xml у розширюваному форматі ??
Swap-IOS-Android

я спробував ваше рішення, але воно все ще відображає той самий вигляд списку
Swap-IOS-Android

@SwapAndroid Я оновлюю свою відповідь. Найкращий спосіб - використовувати shape = "прямокутник". custom_color - це колір вашого дільника (я міняю стандартний андроїд чорний).
nfirex

у мене не працює ... я додав код адаптера входу на основне питання.
Swap-IOS-Android

З цим xml-кодом я маю такий результат: dl.dropbox.com/u/17900041/device-2012-12-27-164024.png Вам потрібно щось подібне чи ні?
nfirex

4

Як @Guulio Piancastelli, згаданий у відповіді @ASP, <inset>зазнає помилки, коли колір фону контейнера списку не збігається з рядками всередині списку. Одним із рішень є використання, <layer-list>як показано нижче:

//This item is to overlay the container colour with the row background colour
<item
    android:left="0dp"
    android:right="0dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/row_background" />
    </shape>
</item>

//This item is the divider, put it at bottom so it will overlay the background colour
<item
    android:left="92dp"
    android:right="0dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/divider
    </shape>
</item>

Тоді ви можете встановити його як роздільник, як пропонують більшість відповідей:

<ListView
    android:dividerHeight="2dp"
    android:divider="@drawable/layer_list"
    ...
/>

0

У вашому елементі списку надайте відступ до основного макета як

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   android:padding="10dp"
   ....// Remaining fields
>
... //Remaining items
</LinearLayout>

це не працює .. я додав padding = "10", але все одно ... немає відступів ліворуч та праворуч для елемента входу
Swap-IOS-Android

@SwapAndroid, спробуйте цей один
Ram Кіран

0

це має бути альтернативним рішенням для цього питання:

<View 
   android:layout_width="match_parent"
   android:layout_height="1dp"
   android:layout_alignParentBottom="true"
   android:background="color/secondary_text"
   android:layout_marginTop="16dp" />

-4

встановіть висоту і колір розділювача елементів списку:

<ListView 
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/listV_main"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:divider="@android:color/darker_gray"
android:dividerHeight="1dp"/>

я просто скажу, що для <ListView> це: android: divideer = "@ android: color / darker_gray" android: divideerHeight = "1dp" працює нормально. Створіть новий ListView за допомогою макета android.R.layout.simple_item1 для ArrayAdapter, і ви побачите, як він працює. так може бути проблема у ваших нестандартних предметах
Кирил Івану

я додав свій код адаптера для входу ... чи можете ви запропонувати будь-яке рішення, будь ласка
Swap-IOS-Android

Я просто можу запропонувати створити простий ListView mListView = (ListView) findViewById (R.id.listV_main); mListView.setAdapter (новий ArrayAdapter (mContext, android.R.layout.simple_list_item_1, new String [] {"item1", "item2", "item3"})); Я перевірив його для вашого ListView;), звичайно, чудово працює, показуючи роздільники), тож просто знайдіть проблему у створених елементах списку Бажаю вам лише удачі!)
Кирил Івану
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.