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

第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)

2番目の方法

現在のロケールから言語を抽出できます。標準の Java API を介して、または Android コンテキストを使用して、ロケールを抽出できます。たとえば、次の 2 行は同等です。

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

いいえ。電話のロケールはありますが、キーボードは仕様上それを無視する場合があります (多くのキーボードでは、バイリンガル ユーザー向けにキーボード内で言語を切り替えることができます)。キーボードがそれを OS に報告するための API はありません。

于 2013-07-16T07:55:13.350 に答える
-3

デバイスの選択された言語を取得したい場合。これはあなたを助けるかもしれません

Locale.getDefault().getDisplayLanguage();

次のこともできます。

Locale.getDefault().toString()これにより、ロケールを完全に識別する文字列が得られます (例: "en_US")。

于 2013-07-16T07:56:53.347 に答える