Personnalisez la disposition du clavier externe sur Android sans root

J'aime la disposition du clavier sur Mac: Cmd (Ctrl) sous le pouce et la possibilité, sans chamanisme, de changer le comportement de CapsLock directement dans les paramètres. Le même résultat est facilement obtenu sous Linux en utilisant setxkbmapla console ou, par exemple, gnome-tweak-tooldans l'interface utilisateur. Mais que se passe-t-il si le clavier se connecte à Android?



Sous Android, il existe plusieurs façons de personnaliser un clavier externe:


  1. Installation d'un clavier tiers. Par exemple, External Keyboard Helper .
  2. / kl kcm ( root). , , .
  3. , .

. — . .



.


Key Layout


Key layout (.kl) (Linux Key Code), .. , , (Android  Key), .. TAB, ENTER F. - . , , , , Gamepad Tester.


Key Character Map


Key Character Map (.kcm) , , English(US).



4.1 Android . Settings -> Language & input -> Physical keyboard. , , " ".



:


  • Esc CapsLock.
  • Ctrl/Win/Alt Win/Alt/Ctrl Alt/PrintScreen/Ctrl Ctrl/Alt/Ctrl .
  • Alt+Tab Ctrl+Tab.
  • Ctrl+Shift+3.
  • Win+Space.
  • .


.. ( Ctrl CapsLock, Vim?), " ", apk-. custom-keyboard-layout — Android.



git clone git@github.com:ris58h/custom-keyboard-layout.git

app/src/main/AndroidManifest.xml:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ris58h.custom_keyboard_layout">

    <application android:label="@string/app_name">
        <receiver
            android:name=".InputDeviceReceiver"
            android:label="@string/keyboard_layouts_label">
            <intent-filter>
                <action android:name="android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS" />
            </intent-filter>
            <meta-data
                android:name="android.hardware.input.metadata.KEYBOARD_LAYOUTS"
                android:resource="@xml/keyboard_layouts" />
        </receiver>
    </application>
</manifest>

reciever. , ( InputDeviceReceiver) — , . reciever , app/src/main/res/xml/keyboard_layouts.xml:


<?xml version="1.0" encoding="utf-8"?>
<keyboard-layouts xmlns:android="http://schemas.android.com/apk/res/android">
    <keyboard-layout
        android:name="keyboard_layout_en_us"
        android:keyboardLayout="@raw/keyboard_layout_en_us"
        android:label="@string/keyboard_layout_en_us_label" />
</keyboard-layouts>

keyboard_layout_en_us.



app/src/main/res/raw/keyboard_layout_en_us.kcm , :


type OVERLAY

, , - Generic.kcm. .. — .


Key Layout . kcm-, , , Ctrl Alt kl-. : map kl- kcm-.


keyboard_layout_en_us.kcm :


type OVERLAY

map key 58  ESCAPE

map key 29  META_LEFT
map key 56  CTRL_LEFT
map key 125 ALT_LEFT

map key 99  ALT_RIGHT
map key 100 CTRL_RIGHT

key TAB {
    label:                              '\t'
    base:                               '\t'
    ctrl:                               fallback APP_SWITCH
}

key 3 {
    label:                              '3'
    base:                               '3'
    shift:                              '#'
    ctrl+shift:                         fallback SYSRQ
}

, Win+Space — .



, English(US), kcm- , . . keyboard_layout_russian.kcm, app/src/main/res/raw/ , , app/src/main/res/xml/keyboard_layouts.xml:


<?xml version="1.0" encoding="utf-8"?>
<keyboard-layouts xmlns:android="http://schemas.android.com/apk/res/android">
    <keyboard-layout
        android:name="keyboard_layout_en_us"
        android:keyboardLayout="@raw/keyboard_layout_en_us"
        android:label="@string/keyboard_layout_en_us_label" />
    <keyboard-layout
        android:name="keyboard_layout_ru"
        android:keyboardLayout="@raw/keyboard_layout_ru"
        android:label="@string/keyboard_layout_ru_label" />
</keyboard-layouts>

keyboard_layout_ru_label app/src/main/res/values/strings.xml.
, , . '3', , :


key 3 {
    label:                              '3'
    base:                               '3'
    shift:                              '\u2116'
    ralt:                               '#'
    ctrl+shift:                         fallback SYSRQ
}

Vendor_17ef_Product_6048.



Nous collectons et installons notre application. La façon la plus simple de le faire est d'utiliser Android Studio en suivant la documentation officielle .


Si tout est fait correctement, Settings -> Language & input -> Physical keyboardnos mises en page apparaîtront, et dans la liste des applications - Custom Keyboard Layout.


Conclusion


La personnalisation d'un clavier externe sans root est possible. Toutes les listes de souhaits ne sont pas réalisables en même temps: le changement de langue sur Win + Space n'a pas fonctionné, mais cela peut être un problème de firmware.


L'article est volontairement bref - tous les détails peuvent être trouvés sur les liens.


All Articles