2016-07-29 42 views
3

Ich habe ein Problem und konnte bis jetzt keine Lösung finden! Ich habe eine benutzerdefinierte Tastatur mit mehreren Tasten implementiert. Jeder Schlüssel hat ein Hintergrundbild. Ich möchte die Hintergrundfarbe der gedrückten Taste selbst wie in der ursprünglichen Tastatur unten ändern:Android Custom Keyboard Ändern Hintergrundfarbe Taste gedrückt

enter image description here

Ich möchte eine Vorschau nicht haben, ich möchte die Hintergrundfarbe des Schlüssels selbst ändern , wenn die Taste gedrückt wird. Hier sind meine Dateien:

keyboard.xml

<?xml version="1.0" encoding="UTF-8"?> 
<android.inputmethodservice.KeyboardView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/keyboard" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:keyPreviewOffset="10dp" 
android:keyPreviewLayout ="@layout/preview" 
android:keyTextColor="@color/colorAccent" 
android:keyBackground="@drawable/keybackground" 
android:background="#881f2023" 
/> 

keybackground.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:drawable="@drawable/cleanbuttonnormal" /> 
<item 
    android:state_pressed="true" 
    android:drawable="@drawable/cleandeactivate" /> 
<item 
    android:state_checkable="true" 
    android:drawable="@drawable/cleanbuttonnormal" /> 
<item 
    android:state_checkable="true" 
    android:state_pressed="true" 
    android:drawable="@drawable/cleandeactivate" /> 
<item 
    android:state_checkable="true" 
    android:state_checked="true" 
    android:drawable="@drawable/cleanbuttonnormal" /> 
<item 
    android:state_checkable="true" 
    android:state_checked="true" 
    android:state_pressed="true" 
    android:drawable="@drawable/keybackground" /> 
</selector> 

Die Hintergrundfarbe wird auf meine ziehbar geändert werden, aber wenn ich die Taste drücken, wird es nicht geändert in den gedrückten Zustand. Der Hintergrund bleibt gleich. Kannst du mir bitte Helfen?

Hier meine benutzerdefinierte Tastaturlayout, mit Vorschau aktiviert zu zeigen, dass der Button getroffen wurde.

enter image description here

Die schwarze Taste mit dem 8 sollte gelb. Die Vorschau dient zum Debuggen.

Antwort

1

Das Problem ist mit Ihrer Zustandsliste in keybackground.xml. Hier Auszug aus state list documentation:

Während jeder Zustandsänderung, die Zustandsliste wird durchquert von oben nach unten und das erste Element, das den aktuellen Zustand übereinstimmt, wird verwendet-die Auswahl nicht auf der Grundlage der „besten Übereinstimmung, "aber einfach der erste Artikel , der die Mindestkriterien des Staates erfüllt.

Also in Ihrem Fall <item android:drawable="@drawable/cleanbuttonnormal" /> wird jedes Mal ausgewählt. Sie sollten die Reihenfolge der Elemente ändern, damit die spezifischsten Elemente zuerst angezeigt werden.

+0

Danke Alexander für Ihre Antwort! Ich verstehe das Problem, aber wo ändere ich das? Welche Dateien werden zuerst überprüft? Wie kann ich meine spezifische background.xml-Datei als ersten Hintergrund festlegen? Ich bemerkte, dass ich einen Tippfehler machte. Ich habe das einmal korrigiert. Ich habe die keybackground.xml von cleanbuttonnormal verwendet. Jetzt sieht es wie mein Code aus. – user3325230

+0

Probieren Sie die umgekehrte Reihenfolge! –

+0

Gut danke! Habe diese Tatsache nicht erkannt. Du hast recht, hab nur den Status oben überprüft und alles funktioniert! Vielen Dank! – user3325230