Android GridView dibujar divisores

Me gustaría saber la forma más sencilla de dibujar divisores entre los elementos (actualmente textviews) dentro de un GridView. La única manera que se me ocurre es dibujar un borde alrededor de los textviews así que cuando se combinan, se ven como continua horizontal y vertical divisores.

Hay un setDivider() para listviews, pero no gridviews?

Gracias.

  • stackoverflow.com/a/12047760/375093 Esta respuesta parecía ser más fácil e inteligente de la respuesta a continuación
  • Si establece el color de fondo de un GridView elemento, a continuación, el color del elemento no cambia cuando es enfocado. El usuario seleccionado supera este problema.
  • Será lento, el proceso de sorteo.
InformationsquelleAutor Eric Chen | 2011-08-20

2 Kommentare

  1. 28

    Por desgracia, después de mirar el código fuente, no pude ver ninguna manera fácil de agregar bordes aparte de tomar el enfoque de añadir bordes a cada celda. Como referencia, voy a publicar mi solución aquí.

    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"
    />

    Ya que todas las líneas doble en tamaño a medida que se unan a sus células vecinas, hice el divisor tamaño de 1px en lugar de 1dp por lo que no aparece demasiado grande en algunas pantallas. También, he hecho la vista de cuadrícula tienen márgenes negativos para ocultar las líneas en ambos lados. Espero que esto ayude a alguien.

    • De niza. ¿Cuáles son sus list_divider y list_select define como?
    • Gracias, en list_selector.xml he utilizado «@dibujable/item_border» está trabajando bien tan dividido como el componente de la partida, el problema es cómo evitar el onclick de escucha en la que el divisor en la interfaz de usuario?? Si haga clic en el elemento de la frontera también seleccionado 🙁 !! alguna solución para eso??
  2. 35

    En caso de que usted acaba de líneas simples, como las fronteras, mucho, mucho más simple es establecer un color de fondo de una GridView y adecuado relleno & espaciado:

    <GridView
        (...)
        android:background="@color/LightGold"
        android:listSelector="@android:color/transparent"
        android:horizontalSpacing="1dip"
        android:verticalSpacing="1dip"
        android:paddingLeft="1dip"
        android:paddingTop="1dip" />
    • No trabajo, tengo un color sólido y sin espacios.
    • Gran idea, se le dará divisor como efecto y puede aumentar el divisor por el aumento de espaciado horizontal y vertical.
    • Esto sólo funcionará si, posteriormente, establecer el fondo de cada celda individualmente. Como desventaja, se hace un sobregiro.
    • Si usted tiene dos columnas, y tienen un número impar de elementos, esto añade un fondo sólido para el espacio vacío
    • no funciona…!
    • No es una buena solución.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea