Android GridView рисовать разделители - PullRequest
24 голосов
/ 20 августа 2011

Мне бы хотелось знать самый простой способ рисования разделителей между элементами (в настоящее время текстовыми представлениями) в GridView.Единственный способ, о котором я могу подумать, - это нарисовать границы вокруг этих текстовых представлений, чтобы при объединении они выглядели как непрерывные горизонтальные и вертикальные разделители.

Существует setDivider () для списочных представлений, но не для видов сетки?

Спасибо.

Ответы [ 2 ]

35 голосов
/ 09 июля 2012

Если вам нужны простые линии в качестве границ, гораздо проще установить цвет фона для GridView и правильные отступы и интервалы:

<GridView
    (...)
    android:background="@color/LightGold"
    android:listSelector="@android:color/transparent"
    android:horizontalSpacing="1dip"
    android:verticalSpacing="1dip"
    android:paddingLeft="1dip"
    android:paddingTop="1dip" />
28 голосов
/ 05 сентября 2011

К сожалению, просмотрев исходный код, я не смог найти простого способа добавления границ, кроме подхода добавления границ для каждой ячейки.В качестве ссылки я опубликую свое решение здесь.

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:background="@drawable/list_selector">

    <!-- Cell contents -->

</LinearLayout>

list_selector.xml

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

item_border.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid 
        android:color="@android:color/transparent" 
    />
    <stroke 
        android:width="1px" 
        android:color="@color/list_divider" 
    />
</shape>

item_border_selected.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid 
        android:color="@color/list_select" 
    />
    <stroke 
        android:width="1px" 
        android:color="@color/list_divider" 
    />
</shape>

items_view.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginLeft="-1px"
    android:layout_marginRight="-1px"
    android:listSelector="@android:color/transparent"
/>

Поскольку все строки удваиваютсяпо размеру, когда они присоединяются к соседним ячейкам, я сделал размер делителя 1px вместо 1dp, чтобы он не выглядел слишком большим на некоторых экранах.Кроме того, я сделал отображение сетки с отрицательными полями, чтобы скрыть линии с обеих сторон.Я надеюсь, что это помогает кому-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...