如何在java中更改自定义安卓键盘的键标签



我想在运行时通过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( 返回第一个键。

相关内容

  • 没有找到相关文章

最新更新