2012-02-12 13 views
42

Tengo algunas vistas en las que se puede hacer clic y quiero establecer el fondo predeterminado disponible que está presente en el clic de lista (en ICS es un color azul). He intentado poner como fondo esto:Fondo del selector predeterminado en Vistas clicables

android:background="@android:drawable/list_selector_background" 

pero no es el color azul por defecto que tengo por defecto (el que he utilizado es de color naranja). ¿Cuál es el drawable utilizado por defecto en Android como selector de clics?

Gracias

+12

use android: background = "? Android: attr/seleccionableItemBackground" – Adnan

Respuesta

20

Es list_selector_holo_dark o la versión ligera holo equivalente; y estos son los valores predeterminados en Honeycomb y más arriba. list_selector_background es la versión no holo, utilizada en Gingerbread y más abajo.

EDITAR: yo creo (pero no puedo confirmar) que el selector de plataforma es agnóstico ?android:attr/listSelector

+0

y cuál es el selector independiente del tema predeterminado? – Matroska

+2

No hay ninguno, me temo Si desea utilizar el ICS (azul) en todas las versiones de Android, deberá copiar los recursos dibujables en su propio proyecto. Alternativamente, si quiere usar el predeterminado para cada versión de Android, debe hacer dos versiones de su vista clicable, una en '\ layout \' que usa '@android: drawable/list_selector_background' y otra en' \ layout-v11 \ 'que usa' @android: drawable/list_selector_holo_dark' –

+2

Por cierto, @android: drawable/list_selector_holo_dark no es público, así que no puedo usarlo en los diseños – Matroska

137

Esto funciona para mí:

android:background="?android:attr/selectableItemBackground" 
+2

Si uso esto en un selector, se rompe en compilaciones anteriores a 3.x ... – Kenny

+26

póngalo en una carpeta v11. Tan simple como eso, bienvenido a Android ;-) –

+1

o 'android: background ="? Android: attr/listChoiceBackgroundIndicator " ' – deadfish

4

Alternativamente,

android:background="?android:attr/listChoiceBackgroundIndicator 

si solo desea que los elementos resalten en azul (o lo que sea ault es) mientras se hace clic.

+0

No, eso no será predeterminado para list_selector_holo_dark en dispositivos JellyBean. Todavía se destaca la lista de elementos con un color amarillo anaranjado (estilo Gingerbread). –

+0

funciona bien, 'emulator-api4.0-blue',' emulator-nexus4-api4.1.1-blue', 'device-nexus4-api4.4.2-gray' – deadfish

7

Hay una manera de combinar todas las respuestas válidas:

definir un atributo (por ejemplo, en los valores/attrs.xml.):.

<attr name="clickableItemBackground" format="reference"/> 

En su plataforma sección de tema dependiente (por ejemplo, en valores/o valores styles.xml/themes.xml) declaran esto:

<style name="Theme.Platform" parent="@android:style/Theme.Whatever"> 
     <item name="clickableItemBackground">@android:drawable/list_selector_background</item> 
</style> 

en su sección de tema depende plataforma para API-11 + (por ejemplo, en los valores-v11/o valores styles.xml-v11/temas. .xml) declara th es:

<style name="Theme.Platform" parent="@android:style/Theme.Holo.Whatever"> 
     <item name="clickableItemBackground">?android:attr/selectableItemBackground</item> 
</style> 

Luego use ?attr/clickableItemBackground donde sea necesario.

5

Una solución similar a la respuesta de flx, pero sin definición de atributo adicional.

estilo independiente de la plataforma utilizada para los dispositivos pre-Holo (en res\values\styles.xml):

<style name="SelectableItem"> 
    <item name="android:background">@android:drawable/list_selector_background</item> 
</style> 

estilo para dispositivos Holo (API Nivel 14+) (en res\values-v14\styles.xml):

<style name="SelectableItem"> 
    <item name="android:background">?android:attr/selectableItemBackground</item> 
</style> 

Aplicar estilo a visión necesario, por ejemplo, LinearLayout:

<LinearLayout 
    style="@style/SelectableItem" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
... 
</LinearLayout> 
+0

Finalmente algo que funciona, sin tener que crear diferentes archivos de diseño .Las etiquetas "fondo" y "attr" no funcionan con la etiqueta "dibujable", que es necesaria para los estados del selector, por lo que todas las otras soluciones en esta página no funcionan. – lenooh

3

Este trabajo s bien en api 11 y superior. Pero como se señaló, no funcionará en versiones anteriores.

android:background="?android:attr/selectableItemBackground" 

Aquí es una solución para que se ejecute en todas las versiones Android corriendo.

  1. Agregue los colores apropiados dentro del colors.xml que se encuentra dentro de su carpeta de valores. Debe aparecer como tal:

    <color name="white">#ffffff</color> 
    <color name="blue">#7ecce8</color> 
    
  2. Cree un archivo selector de xml. Aquí he denominado button_selection.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/blue"/>   <!--pressed --> 
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused --> 
    <item android:drawable="@color/white"/> <!-- default --> 
    </selector> 
    
  3. Ir a la vista o el botón y establecer el button_selection.xml recién creado como telón de fondo.

    android:background="@drawable/button_selection" 
    
11

Si está utilizando appcompat-v7, sólo puede utilizar ?attr/selectableItemBackground.

+5

¿Es posible personalizarlo para que el color sea diferente? –

Cuestiones relacionadas