我想在运行时通过java更改自定义键盘上的键标签。我在任何地方都找不到任何解决方案。
爪哇文件
public class MyKeyboardService extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
public final static int keyToChange = 257;
KeyboardView kv;
Intent intent;
void updateInputView() {
if (kv == null)
return;
Keyboard currentKeyboard = kv.getKeyboard();
List<Keyboard.Key> keys = currentKeyboard.getKeys();
keys.get(keyToChange).label = "Change Label";
kv.invalidateKey(keyToChange);
}
@Override
public View onCreateInputView() {
checkIfFirstRun();
KeyboardView kv = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard, null);
Keyboard keyboard = new Keyboard(this, R.xml.layout_keys);
kv.setKeyboard(keyboard);
kv.setPreviewEnabled(false);
kv.setOnKeyboardActionListener(this);
updateInputView();
return kv;
XML 文件
<Key
android:codes="257"
android:keyWidth="60%p"/>
现在,我仍然在密钥上得到空白标签。我希望它显示"更改标签">
我的键盘也有类似的问题。我想有一个按钮,根据用户的区域设置显示与用户最相关的货币符号。
因此,更改按钮标签的第一个障碍是识别按钮。我向键添加了一个静态标签,用于标识代码中的键。
<Key
android:isRepeatable="true"
android:keyLabel="@string/currencySymbol"
android:keyWidth="25%p"/>
下一项工作是根据我的愿望更改标签。在视图类中,在初始化(对象构造(期间,我设置了标签。
public NumberKeypadView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initialize(context);
}
public void initialize(Context context) {
...
setCurrencySymbolBasedOnLocale(keyboard);
...
}
private void setCurrencySymbolBasedOnLocale(Keyboard keyboard) {
for (Keyboard.Key key: keyboard.getKeys()) {
if(key.label != null && key.label.toString().equals(getResources().getString(R.string.currencySymbol))) {
Currency currency = Currency.getInstance(Locale.getDefault());
key.label = currency.getSymbol();
key.text = currency.getSymbol();
}
}
}
仅此而已。
List<>.get(( 返回具有特定索引的键,而不是具有特定代码的键。例如,List<>.get(0( 返回第一个键。