2016-07-29 5 views
3

У меня возникла проблема и пока не удалось найти решение! Я реализовал пользовательскую клавиатуру с несколькими ключами. Каждый ключ получил фоновое изображение. Я хотел бы изменить цвет фона самой нажатой клавиши, как показано на оригинальной клавиатуре ниже:Пользовательская клавиатура Android Изменение цвета фона нажата

enter image description here

Я не хочу иметь предварительный просмотр, я хотел бы изменить цвет фона самого ключа , когда клавиша нажата. Вот мои файлы:

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> 

Цвет фона будет изменен на мой Drawable, но когда я нажимаю кнопку, он не будет изменен к нажатому состоянию. Фон остается тем же. Не могли бы вы мне помочь?

Здесь моя пользовательская раскладка клавиатуры, с предварительным просмотром, позволяет показать, что нажата кнопка.

enter image description here

Черная кнопка с 8 должен получить желтый цвет. Предварительный просмотр предназначен для отладки.

ответ

1

Проблема с вашим государственным списком в keybackground.xml. Вот выдержка из state list documentation:

При каждом изменении состояния, состояние список проходится сверху вниз и первый элемент, который соответствует используется, текущее состояние выбора не на основе «лучший матч, ", а просто первый пункт , который соответствует минимальным критериям состояния.

Так что в вашем случае <item android:drawable="@drawable/cleanbuttonnormal" /> выбирается каждый раз. Вы должны изменить порядок пунктов, так что наиболее конкретные предметы идут первыми.

+0

Спасибо Alexander за ваш ответ! Я понимаю проблему, но где я могу это изменить? Какие файлы сначала проверяются? Как я могу установить свой конкретный файл background.xml в качестве первого фона? Я заметил, что сделал опечатку. Я исправил один раз. Я использовал keybackground.xml insted of cleanbuttonnormal. Теперь он выглядит как мой код. – user3325230

+0

Попробуйте обратный порядок! –

+0

Хорошо, спасибо! Не понял этого факта. Вы правы, только переместили проверенное состояние выше, и все работает! Благодаря! – user3325230