2010-08-17 19 views
34

Seguí this tutorial para crear una lista de estado de color para una vista particular de Android. Solo quiero resaltar cuando se hace clic para que el usuario sepa por qué la pantalla acaba de cambiar.Android LinearLayout con recurso de color: ¿Qué estoy haciendo mal?

Cuando se representa la vista, me sale el siguiente error:

org.xmlpull.v1.XmlPullParserException: Línea de archivo XML binario # 3: Etiqueta requiere una etiqueta de atributo o niño dibujable 'definir un dibujable

Mi XML de color (en res/color/viewcolor.xml):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="#ff33ffff"/> <!-- pressed --> 
    <item android:color="#ff000000"/> <!-- default --> 
</selector> 

Mi diseño XML (en res/layout/myview.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/myview" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="top" 
    android:background="@color/viewcolor"> 
    <!--crap in the layout--> 
</LinearLayout> 

¿Qué extrañé?

+0

si alguien quiere obtener una solución completa, active este repositorio: https://github.com/shamanland/AndroidLayoutSelector existe la costumbre se puede hacer clic checkable '' 'LinearLayout'''/como un' '' ToggleButton''' –

Respuesta

52

Recuerdo que solucioné este error utilizando el estado dibujable en lugar del color de estado. Por alguna razón, el fondo del diseño simplemente no funciona con colores con estado. Por lo tanto, intente crear un dibujante con estado (por ejemplo, una lista de formas dibujables con diferentes colores) y úselo como fondo.

res/dibujable/pressed.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <solid android:color="#ff33ffff" /> 
</shape> 

res/dibujable/normal.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <solid android:color="#ff000000" /> 
</shape> 

res/dibujable/background.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="@drawable/pressed" /> 
    <item android:drawable="@drawable/normal" /> 
</selector> 

Entonces use background.xml dibujable como fondo :)

+0

Eso funcionó perfectamente. Es extraño que el color no funcione directamente, sin embargo. ¡Gracias! – iandisme

+14

En lugar de usar formas en su dibujo, el atributo android: drawable acepta un recurso de color (por ejemplo, @ color/black). –

49

En lugar de usar formas en su dibujo, puede usar el atributo android:drawable que acepta un recurso de color (p. Ej. @de color negro).

layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myview" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="top" 
    android:background="@drawable/myDrawable"> 
    <!-- other views in layout--> 
</LinearLayout> 

my_drawable.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- focused --> 
    <item android:state_focused="true" android:drawable="@color/YOUR_COLOR_HERE" /> 
    <!-- focused and pressed--> 
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" /> 
    <!-- pressed --> 
    <item android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" /> 
    <!-- default --> 
    <item android:drawable="@color/YOUR_COLOR_HERE" /> 
</selector> 

En my_drawable.xml que necesita para asegurarse de que los colores seleccionados se definen en res/values/colors.xml, o esto no trabajo.

Si desea utilizar una imagen en lugar de un cambio de color de un recurso de color a un recurso dibujable. Ejemplo:

android:drawable="@color/YOUR_COLOR_HERE" 
android:drawable="@drawable/YOUR_IMAGE_HERE" 
+2

Esto no funcionó para mi fuera de la caja. Tuve que cambiar Android: drawable en los elementos del selector a android: color y luego funcionó bien. – emmby

+0

Muchas gracias por esto, Austyn. – metter

+0

@emmby: Agregué una explicación sobre lo que debe hacer para usar este código "de fábrica". –

Cuestiones relacionadas