我正在尝试检测当前选定的键盘语言。为此,我使用以下代码:
/* 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
异常。
有没有办法让键盘选择语言?如果没有,我怎么能检测用户输入应用程序的语言?
答案 0 :(得分:5)
以下是我为获取可用输入语言所做的工作:
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);
}
}
}
}
答案 1 :(得分:3)
首先检测设备键盘的区域设置,然后从中获取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
将提供您的键盘语言。希望这会有所帮助。
答案 2 :(得分:1)
没有。有一个手机区域设置,但键盘可能会被设计忽略(许多键盘允许您在双键用户的键盘内切换语言)。没有键盘的API可以向操作系统报告。
答案 3 :(得分:1)
第一种方法
获取设备的选定语言。这可能有助于你
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 Context来提取语言环境。例如,下面两行是等价的:
String locale = context.getResources().getConfiguration().locale.getDisplayName();
String locale = java.util.Locale.getDefault().getDisplayName();
答案 4 :(得分:-2)
如果您想获得所选设备的语言。这可能有助于你
Locale.getDefault().getDisplayLanguage();
您可能也会这样做:
Locale.getDefault().toString()
,它提供了一个完全标识语言环境的字符串,例如“EN_US”。