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 setxkbmap
la console ou, par exemple, gnome-tweak-tool
dans 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:
- Installation d'un clavier tiers. Par exemple, External Keyboard Helper .
- / kl kcm ( root). , , .
- , .
. — . .
.
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 keyboard
nos 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.