Android Studio 如何在运行时编程设置CustomKeyboard文本颜色?

twh00eeo  于 2023-03-09  发布在  Android
关注(0)|答案(2)|浏览(154)

我在我的应用程序中有一个自定义键盘,希望在运行时根据用户偏好更改文本颜色。我可以在XML中设置KeyTextColor,但没有这样的属性来编程设置它。这是我如何在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。有什么想法吗?

euoag5mw

euoag5mw1#

这并不是你所要求的,但是它解决了我的问题。你可以通过在layout文件夹中添加不同的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);

    }
41zrol4v

41zrol4v2#

首先,创建一个从KeyboardView扩展的类(假设其名称为mKeyboardView)。
然后更改您的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);
        }
    }
}

与上面的代码一样,您可以控制字体大小、颜色、粗细和许多其他属性。
希望我的回答能帮到大家。

相关问题