Как установить 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);
}
}
}
Как и в приведенном выше коде, вы можете управлять размером шрифта, цветом, толщиной и многими другими свойствами.
Надеюсь, мой ответ поможет кому-то.