我试图在运行时按下软键盘上的按键图标:
@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)
答案 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
。