12

问题描述

我正在尝试检测当前选择的键盘语言。为此,我使用以下代码:

代码

/* Return the handle to a system-level service by name. The class of the returned
 * object varies by the requested name. */
 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
/* Returns the current input method subtype. This subtype is one of the subtypes in the
 * current input method. This method returns null when the current input method doesn't
 * have any input method subtype. */
 InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
/* The locale of the subtype. This method returns the "locale" string parameter passed
 * to the constructor. */
 String locale = ims.getLocale();

但应用程序在功能上遇到NoSuchMethodError异常。getCurrentInputMethodSubtype

问题

有没有办法让键盘选择语言?如果没有,我如何检测用户在应用程序中输入的语言?

4

5 回答 5

7

以下是我为获得可用输入语言所做的工作:

private void printInputLanguages() {
   InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
   List<InputMethodInfo> ims = imm.getEnabledInputMethodList();

   for (InputMethodInfo method : ims) {
       List<InputMethodSubtype> submethods = imm.getEnabledInputMethodSubtypeList(method, true);
       for (InputMethodSubtype submethod : submethods) {
          if (submethod.getMode().equals("keyboard")) {
             String currentLocale = submethod.getLocale();
             Log.i(TAG, "Available input method locale: " + currentLocale);
          }
       }
   }
}
于 2015-01-29T14:10:55.523 回答
5

您可以通过首先检测设备键盘的区域设置然后Locale从中获取对象来获取键盘语言。例如,

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
    String localeString = ims.getLocale();
    Locale locale = new Locale(localeString);
    String currentLanguage = locale.getDisplayLanguage();

在这里,currentLanguage会给你的键盘语言。希望这可以帮助。

于 2014-08-04T05:53:50.643 回答
3

第一种方法

获取设备的所选语言。这可能会帮助你

Locale.getDefault().getLanguage()        ---> en     
Locale.getDefault().getISO3Language()    ---> eng
Locale.getDefault().getCountry()         ---> US
Locale.getDefault().getISO3Country()     ---> USA
Locale.getDefault().toString()           ---> en_US
Locale.getDefault().getDisplayLanguage() ---> English
Locale.getDefault().getDisplayCountry()  ---> United States
Locale.getDefault().getDisplayName()     ---> English (United States)

第二种方法

您可以从当前语言环境中提取语言。您可以通过标准 Java API 或使用 Android 上下文提取语言环境。例如,下面的两行是等价的:

String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
于 2014-11-20T07:46:58.183 回答
0

不,有电话区域设置,但键盘可能会故意忽略它(许多键盘允许您在双语用户的键盘内切换语言)。键盘没有 API 可以向操作系统报告它已经这样做了。

于 2013-07-16T07:55:13.350 回答
-3

如果您想获得设备的选定语言。这可能会帮助你

Locale.getDefault().getDisplayLanguage();

你也可以这样做:

Locale.getDefault().toString()它给出了一个完全标识语言环境的字符串,例如“en_US”。

于 2013-07-16T07:56:53.347 回答