Как установить CustomKeyboard Text Color программно во время выполнения?

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

<?xml version="1.0" encoding="utf-8"?>
<app:android.inputmethodservice.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/keyboard"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:keyBackground="@drawable/key_background"
    android:keyPreviewHeight="@dimen/dp_0"
    android:keyTextSize="40sp"
    android:keyTextColor="#00C853">//I set green text color here
</app:android.inputmethodservice.KeyboardView>

Хотите установить тот же KeyTextColor из программы. Есть идеи?

2 ответа

Это не совсем то, что вы спросили, но это решило мою проблему. Вы можете определить свои разные темы, добавив в файл макета другой файл keyboard.xml (например, тот, что в вашем вопросе); И изменить их время выполнения.

@Override
public View onCreateInputView() {

    ...

    int theme_id=keyboard_prefs.getKeyboardThemeID();

    if(theme_id== KeyboardConstants.KEYBOARD_THEME_DARK_ID)
        mInputView=(LatinKeyboardView) getLayoutInflater().inflate(R.layout.keyboard_dark, null);
    else //if(theme_id==2)
        mInputView=(LatinKeyboardView) getLayoutInflater().inflate(R.layout.keyboard_light, null);

    }    

Во-первых, создайте класс (предположим, его имяmKeyboardView), который простирается от KeyboardView .
Затем измените свой тег XML и сделайте цвета вandroid:keyTextColor= прозрачный как:

         <com.example.mKeyboardView
    ...
    android:keyTextColor="@android:color/transparent"
    >
    </com.example.mKeyboardView>

Затем в mKeyboardView переопределитеonDrawи нарисуйте буквы вручную следующим образом:

      public class mKeyboardView extends KeyboardView

    @ColorInt private int MY_COLOR = 0XFF263238;

    @Override
     public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
            
        List<Keyboard.Key> keys = getKeyboard().getKeys();
            for (Keyboard.Key key : keys) {
                drawKey(key, canvas);
            }
        }

    Paint setupKeyText() {
        Paint paint = new Paint();
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setTextSize(70);
        paint.setFakeBoldText(false);
        paint.setColor(MY_COLOR);
    
        return paint;
    }

    void drawKeyText(Keyboard.Key key, Canvas canvas) {
        if (key.label != null && !key.label.toString().isEmpty()) {
            Paint paint = setupKeyText();
            int x = key.x + (int) (key.width / 2.0);
            int y = key.y + (int) ((key.height /2) + (key.height /3.5));
    
            canvas.drawText(key.label.toString(), x , y, paint);
        }
    }
}

Как и в приведенном выше коде, вы можете управлять размером шрифта, цветом, толщиной и многими другими свойствами.

Надеюсь, мой ответ поможет кому-то.

Другие вопросы по тегам