SoftKeyboard,invalidateAllKeys()似乎什么都不做

问题描述 投票:0回答:1

我有一个带有KeyboardView的应用程序,其中包含一个qwerty键盘。在它的字母中我有一个大写键。

在我的java中,我有切换来检查按下了哪个键,在其中一个案例中我有这个:

//...
case -5:
 caps = !caps;
 keyboard.setShifted(caps); //Keyboard
 qwerty_keyboard.invalidateAllKeys(); //KeyboardView
 qwerty_keyboard.requestLayout();
 break;
default:
 char code = (char) primaryCode;
 if (Character.isLetter(code) && caps) {
  code = Character.toUpperCase(code);
 }
 et_search.getText().append(code);
 break;
 //...

默认部分运行良好,并以低或大写形式写入字母。唯一不起作用的是invalidateAllKeys(),它不会将keyboardView中的Keys更改为大写。

我需要做别的吗?

编辑这是我的xml

<?xml version="1.0" encoding="utf-8"?>

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="10%p"
    android:horizontalGap="1dp"
    android:verticalGap="1dp"
    android:keyHeight="36dp"
    >

    <Row>
        <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
        <Key android:codes="119" android:keyLabel="w"/>
        <Key android:codes="101" android:keyLabel="e" android:popupKeyboard="@xml/keyboard_popup_template"
            android:popupCharacters="éê"/>
        <Key android:codes="114" android:keyLabel="r"/>
        <Key android:codes="116" android:keyLabel="t"/>
        <Key android:codes="121" android:keyLabel="y"/>
        <Key android:codes="117" android:keyLabel="u" android:popupKeyboard="@xml/keyboard_popup_template"
            android:popupCharacters="ú"/>
        <Key android:codes="105,237" android:keyLabel="i" android:popupKeyboard="@xml/keyboard_popup_template"
            android:popupCharacters="í"/>
        <Key android:codes="111" android:keyLabel="o" android:popupKeyboard="@xml/keyboard_popup_template"
            android:popupCharacters="òóôõ"/>
        <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="97" android:keyLabel="a" android:horizontalGap="5%p"
            android:keyEdgeFlags="left" android:popupKeyboard="@xml/keyboard_popup_template"
            android:popupCharacters="àáâã"/>
        <Key android:codes="115" android:keyLabel="s"/>
        <Key android:codes="100" android:keyLabel="d"/>
        <Key android:codes="102" android:keyLabel="f"/>
        <Key android:codes="103" android:keyLabel="g"/>
        <Key android:codes="104" android:keyLabel="h"/>
        <Key android:codes="106" android:keyLabel="j"/>
        <Key android:codes="107" android:keyLabel="k"/>
        <Key android:codes="108" android:keyLabel="l" android:keyEdgeFlags="right"/>
    </Row>

    <Row>
        <Key android:codes="-5" android:keyLabel="Shift"
            android:keyWidth="15%p" android:keyEdgeFlags="left"
            android:isRepeatable="true" />
        <Key android:codes="122" android:keyLabel="z"/>
        <Key android:codes="120" android:keyLabel="x"/>
        <Key android:codes="99" android:keyLabel="c" android:popupKeyboard="@xml/keyboard_popup_template"
            android:popupCharacters="ç"/>
        <Key android:codes="118" android:keyLabel="v"/>
        <Key android:codes="98" android:keyLabel="b"/>
        <Key android:codes="110" android:keyLabel="n"/>
        <Key android:codes="109" android:keyLabel="m"/>
        <Key android:codes="-1" android:keyIcon="@drawable/undo"
            android:keyWidth="15%p" android:keyEdgeFlags="right"
            android:isRepeatable="true"/>
    </Row>

    <Row android:rowEdgeFlags="bottom">
        <Key android:codes="32" android:keyLabel="SPACE"
            android:keyWidth="50%p" android:isRepeatable="true" android:horizontalGap="15%p"  android:keyEdgeFlags="left"/>
        <Key android:codes="-2" android:keyLabel="Hide"
            android:keyWidth="20%p" android:keyEdgeFlags="right"/>
    </Row>
</Keyboard>
android android-softkeyboard
1个回答
0
投票
switch (primaryCode)
    {
        case Keyboard.KEYCODE_DELETE:
            /*ic.deleteSurroundingText(1,0);*/

            CharSequence selectedText = ic.getSelectedText(0);

            if (TextUtils.isEmpty(selectedText)) {
                ic.deleteSurroundingText(1, 0);
            } else {
                ic.commitText("", 1);
            }
            break;

        case Keyboard.KEYCODE_SHIFT:
            isCaps = !isCaps;
            keyboard_one.setShifted(isCaps);
            keyboard_view.invalidateAllKeys();
            break;

        case Keyboard.KEYCODE_DONE:
            ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_ENTER));
            break;

        default:
            char code = (char)primaryCode;
            if(Character.isLetter(code) && isCaps)
                code = Character.toUpperCase(code);
            ic.commitText(String.valueOf(code),1);
    }

}

尝试这个 :)

© www.soinside.com 2019 - 2024. All rights reserved.