2010-08-17 10 views
34

Ich folgte this tutorial, um eine Farbstatusliste für eine bestimmte Android-Ansicht zu erstellen. Ich möchte nur, dass es hervorgehoben wird, wenn Sie darauf klicken, damit der Benutzer weiß, warum sich der Bildschirm gerade geändert hat.Android LinearLayout mit Farbressource: Was mache ich falsch?

Wenn die Ansicht gerendert wird, bekomme ich folgende Fehlermeldung:

org.xmlpull.v1.XmlPullParserException: Binary XML-Datei Zeile # 3: Tag einen ‚ziehbar‘ -Attribut oder Kind-Tag erfordert eine ziehbar

definieren

Meine Farbe XML (in res/Farbe/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> 

Meine XML-Layout (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> 

Was habe ich vermisst?

+0

, wenn jemand will volle Lösung erhalten, dieses Repository überprüfen: https://github.com/shamanland/AndroidLayoutSelector gibt es individuelle klickbare/überprüfbar '' 'LinearLayout''' wie ein' '' ToggleButton''' –

Antwort

52

Ich erinnere mich, dass ich um diesen Fehler herum arbeitete, indem ich State-Zeichen statt State-Farbe verwendete. Aus irgendeinem Grund funktioniert der Layout-Hintergrund nicht mit Stateful-Farben. Versuchen Sie also, ein statusbehaftetes Zeichen zu erstellen (z. B. eine Liste mit Zeichenformularen mit verschiedenen Farben), und verwenden Sie es als Hintergrund.

res/ziehbar/pressed.xml:

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

res/ziehbar/normal.xml:

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

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

Dann benutze background.xml als Hintergrund drawbar :)

+0

Das hat perfekt funktioniert. Es ist merkwürdig, dass die Farbe nicht wirklich funktioniert. Vielen Dank! – iandisme

+14

Anstelle der Verwendung von Shapes in Ihrem Zeichenobjekt akzeptiert das Attribut "Androide: Drawable" eine Farbressource (z. B. @ color/black). –

49

Anstelle von Formen in Ihrem Zeichenbereich können Sie das Attribut android:drawable verwenden, das eine Farbressource akzeptiert (z. @Farbe schwarz).

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 Sie müssen sicherstellen, dass die Farben, die Sie in res/values/colors.xml definiert angeben werden, oder dies nicht Arbeit.

Wenn Sie ein Bild anstelle einer Farbänderung von einer Farbressource zu einer aufzeichnbaren Ressource verwenden möchten. Beispiel:

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

Das funktionierte für mich nicht ohne weiteres. Ich musste android ändern: in den wähler einzelteile auf android: farbe und dann hat es gut funktioniert. – emmby

+0

Vielen Dank dafür, Austyn. – metter

+0

@emmby: Ich habe eine Erklärung hinzugefügt, was Sie tun müssen, um diesen Code "out of the box" zu verwenden. –