2010-08-17 10 views
34

Ho seguito this tutorial per creare un elenco di stati colore per una particolare vista Android. Voglio solo che sia evidenziato quando cliccato in modo che l'utente sappia perché lo schermo è appena cambiato.LinearLayout Android con risorsa colore: cosa sto facendo male?

Quando la vista è reso, ottengo il seguente errore:

org.xmlpull.v1.XmlPullParserException: linea di file XML Binary # 3: tag richiede un tag 'disegnabile' attributo o bambino definendo un drawable

Il mio colore XML (in res/colore/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> 

mio layout XML (in 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> 

Cosa mi sono perso?

+0

se qualcuno vuole ottenere completa soluzione, controllare questo repository: https://github.com/shamanland/AndroidLayoutSelector c'è cliccabili personalizzato/verificabili '' 'LinearLayout''' come un' '' ToggleButton''' –

risposta

52

Ricordo di aver aggirato questo errore utilizzando il drawable di stato invece del colore di stato. Per qualche motivo, lo sfondo del layout non funziona con i colori stateful. Quindi prova a creare un drawable stateful (ad esempio un elenco di drawable di forma con colori diversi) e usalo come sfondo.

res/drawable/pressed.xml:

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

res/drawable/normal.xml:

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

res/drawable/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> 

Poi usa background.xml drawable come sfondo :)

+0

Ha funzionato perfettamente. È strano che il colore non funzioni a priori, però. Grazie! – iandisme

+14

Invece di usare forme nel tuo drawable, l'attributo android: drawable accetta una risorsa colore (ad es. @ Colore/nero). –

49

Invece di usare forme nel tuo drawable, puoi usare l'attributo che accetta una risorsa colore (ad es. @colore nero).

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> 

In my_drawable.xml è necessario fare in modo che i colori specificati sono definiti in res/values/colors.xml, o questo non lavoro.

Se si desidera utilizzare un'immagine anziché un cambio di colore da una risorsa colore a una risorsa disegnabile. Esempio:

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

Questo non ha funzionato per me fuori dalla scatola. Ho dovuto modificare Android: disegnabile negli elementi di selezione per Android: colore e poi ha funzionato bene. – emmby

+0

Grazie mille per questo, Austyn. – metter

+0

@emmby: Ho aggiunto una spiegazione su cosa devi fare per usare questo codice "fuori dalla scatola". –

Problemi correlati