Как я могу изменить фон пользовательской клавиши клавиатуры из класса java?

Я разрабатываю клавиатуру Android, и мне нужно изменить фон клавиши при нажатии определенной клавиши. Я попытался сделать это в файле mykeyboard.java:

private KeyboardView kv;
(...)
kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
kv.setOnKeyboardActionListener(this);
keyboard = new Keyboard(this, qwerty);
kv.setKeyboard(keyboard);
kv.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        (...)

        (v.findViewById(R.id.myKeyId)).setBackgroundColor(Color.BLUE);
        }
}

Но эта ошибка происходит:

᠎java.lang.NullPointerException: попытка вызвать виртуальный метод «void android.view.View.setBackgroundColor(int)» для нулевой ссылки на объект в com.mtsolutions.mykeyboard.MyKeyBoard$1.onTouch(MyKeyBoard.java:87)

Что это за строка:

(v.findViewById(R.id.myKeyId)).setBackgroundColor(Color.BLUE);

Это код res/layout/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:keyPreviewHeight="0dp"/>

А где код из файла res/xml/qwerty.xml:

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="6.25%p"
    android:horizontalGap="0px"
    android:verticalGap="0px"
    android:keyHeight="5%p">

    <Row>
        <Key> (...) android:id"@+id/myKeyId" (...) />
    </Row>

</Keyboard>

Что я делаю не так?

Спасибо.


person FlowYourMind    schedule 10.10.2016    source источник


Ответы (1)


kv.setBackgroundColor(Color.BLUE);

вместо сложного кода, сделайте это вы

person Aditya Rajput    schedule 22.02.2019