在运行时更改软键盘上的键图标

时间:2016-01-13 12:34:09

标签: android keyboard icons

我试图在运行时按下软键盘上的按键图标:

@Override
public void onPress(int primaryCode) {

    Keyboard currentKeyboard = mInputView.getKeyboard();
    List<Keyboard.Key> keys = currentKeyboard.getKeys();
    mInputView.invalidateKey(primaryCode);

    keys.get(primaryCode).label = null;
    keys.get(primaryCode).icon = ContextCompat.getDrawable(getApplicationContext(), android.R.drawable.ic_dialog_email);

}

它有效,但是当我按下一个键时,请更改其他键的图标。你知道为什么吗?

(我使用的是API级别8)

1 个答案:

答案 0 :(得分:2)

这样做

@Override
public void onPress(int primaryCode) 
{
    Keyboard currentKeyboard = mInputView.getKeyboard();            
    List<Keyboard.Key> keys = currentKeyboard.getKeys();
    mInputView.invalidateKey(primaryCode);

    for(int i = 0; i < keys.size() - 1; i++ )
    {
        Keyboard.Key currentKey = keys.get(i);

        //If your Key contains more than one code, then you will have to check if the codes array contains the primary code
        if(currentKey.codes[0] == primaryCode) 
        {
            currentKey.label = null;
            currentKey.icon = getResources().getDrawable(android.R.drawable.ic_dialog_email);
            break; // leave the loop once you find your match
        }
    }
}

您的代码无效的原因:此处的罪魁祸首是keys.get(primaryCode)。您需要从Keys列表中获取Key。因为get()的{​​{1}}方法需要您想要获取的对象的位置。但是你没有传递它们对象的位置,而不是传递键的unicode值。所以,我所做的只是使用其位置从List正确地获取Key。现在,我通过运行List循环并将每个for的unicode值与当前按下的Key的unicode值进行比较来获得该位置。

注意:在某些情况下,一个Key有一个以上的unicode值。在这种情况下,您必须更改Key语句,在其中您将检查代码数组是否包含if