日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

更改Android 默认键盘映射值

發布時間:2024/8/1 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 更改Android 默认键盘映射值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更改Android InputManagerService默認鍵盤映射值

在通常情況下我們使用android手機或者平板連接外接鍵盤,默認的外接鍵盤映射值都是美式鍵盤,或者說是標準鍵盤,然而全世界并非只是用這一種鍵盤,在意大利,日本等國還擁有自己獨特的鍵盤,因此就需要設置他們自己的鍵盤映射值

frameworks/base/packages/InputDevices/res/raw/keyboard_layout_turkish.kcm

比方說在土耳其鍵盤下的 shift + 2 的值為 /,我們假設需要將這個值 改為 “

key 2 {label: '2'base: '2'shift: '"' //我們在這里將默認值改為"ralt: '\u00a3' }

當然在這個目錄下對三十多個國家的特殊鍵盤映射都做了設置,但是主要國家都聚集在西方,比如日本等國也是特殊的鍵盤映射這里就不包括

keyboard_layout_arabic.kcm keyboard_layout_azerbaijani.kcm keyboard_layout_belgian.kcm keyboard_layout_brazilian.kcm keyboard_layout_bulgarian.kcm keyboard_layout_croatian_and_slovenian.kcm keyboard_layout_czech.kcm keyboard_layout_danish.kcm keyboard_layout_english_uk.kcm keyboard_layout_english_us.kcm keyboard_layout_english_us_colemak.kcm keyboard_layout_english_us_dvorak.kcm keyboard_layout_english_us_intl.kcm keyboard_layout_english_us_workman.kcm keyboard_layout_estonian.kcm keyboard_layout_finnish.kcm keyboard_layout_french.kcm keyboard_layout_french_ca.kcm keyboard_layout_german.kcm keyboard_layout_greek.kcm keyboard_layout_hebrew.kcm keyboard_layout_hungarian.kcm keyboard_layout_icelandic.kcm keyboard_layout_italian.kcm keyboard_layout_latvian_qwerty.kcm keyboard_layout_lithuanian.kcm keyboard_layout_norwegian.kcm keyboard_layout_persian.kcm keyboard_layout_polish.kcm keyboard_layout_portuguese.kcm keyboard_layout_russian.kcm keyboard_layout_russian_mac.kcm keyboard_layout_slovak.kcm keyboard_layout_spanish.kcm keyboard_layout_spanish_latin.kcm keyboard_layout_swedish.kcm keyboard_layout_swiss_french.kcm keyboard_layout_swiss_german.kcm keyboard_layout_turkish.kcm keyboard_layout_ukrainian.kcm

我們可以參考這個方法制作我們特殊的鍵盤映射值,android為我們提供了一個類似overrlay的地方

frameworks/base/data/keyboards/Generic.kcm

在這個地方就可以改默認全語言的默認值

那如果我們要動態的去更換剛連接鍵盤的映射值,應該如何入手

需要在InputManagerService中監聽連接鍵盤后返回的默認值

frameworks/base /services/core/java/com/android/server/input/InputManagerService.java

private String getDefaultKeyboardLayout(final InputDevice d) {final Locale systemLocale = mContext.getResources().getConfiguration().locale;// If our locale doesn't have a language for some reason, then we don't really have a// reasonable default.if (TextUtils.isEmpty(systemLocale.getLanguage())) {return null;}final List<KeyboardLayout> layouts = new ArrayList<>();visitAllKeyboardLayouts(new KeyboardLayoutVisitor() {@Overridepublic void visitKeyboardLayout(Resources resources,int keyboardLayoutResId, KeyboardLayout layout) {// Only select a default when we know the layout is appropriate. For now, this// means its a custom layout for a specific keyboard.if (layout.getVendorId() != d.getVendorId()|| layout.getProductId() != d.getProductId()) {return;}final LocaleList locales = layout.getLocales();final int numLocales = locales.size();for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) {if (isCompatibleLocale(systemLocale, locales.get(localeIndex))) {layouts.add(layout);break;}}}});if (layouts.isEmpty()) {//在此方法中,如果用戶未設置默認鍵盤將返回nullreturn null;}// First sort so that ones with higher priority are listed at the topCollections.sort(layouts);// Next we want to try to find an exact match of language, country and variant.final int N = layouts.size();for (int i = 0; i < N; i++) {KeyboardLayout layout = layouts.get(i);final LocaleList locales = layout.getLocales();final int numLocales = locales.size();for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) {final Locale locale = locales.get(localeIndex);if (locale.getCountry().equals(systemLocale.getCountry())&& locale.getVariant().equals(systemLocale.getVariant())) {return layout.getDescriptor();}}}// Then try an exact match of language and countryfor (int i = 0; i < N; i++) {KeyboardLayout layout = layouts.get(i);final LocaleList locales = layout.getLocales();final int numLocales = locales.size();for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) {final Locale locale = locales.get(localeIndex);if (locale.getCountry().equals(systemLocale.getCountry())) {return layout.getDescriptor();}}}// Give up and just use the highest priority layout with matching languagereturn layouts.get(0).getDescriptor(); }

我們可以在幾個renturn的地方去加log,看看在設置對應國家時返回的getDescriptor()究竟是什么,這樣我們就可以在renturn null的地方去返回相應的值,這樣就改變了默認的鍵盤值

總結

以上是生活随笔為你收集整理的更改Android 默认键盘映射值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。