web-dev-qa-db-ja.com

ハードウェアキーボードが接続されていてもソフトキーボードを表示する

USBキーボードが接続されたソフトウェアキーボード(私の場合はRFIDリーダー)を表示する方法はありますか?
InputManagerを使用して(これらまたは同様のパラメーターを使用して)強制的に表示しようとしましたが、うまくいきませんでした

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

重要なお知らせ-ステータス/システムバーに表示するボタンがあることは知っていますが、このボタンはユーザーには表示されません(キオスクアプリ)。

21
Warlock

ハードキーボードがある場合でもtrueと評価するには、InputMethodServiceメソッドonEvaluateInputViewShown()をオーバーライドする必要があります。 onEvaluateInputShown() および InputMethodService のソフト入力ビューセクションを参照してください。このメソッドをオーバーライドするには、独自のカスタムInputMethodServiceクラスを作成してみてください。

編集: onEvaluateInputShown() のソースが役立つはずです。解決策は、InputMethodServiceを拡張する独自のクラスを作成し、数行の長さしかないこの1つのメソッドをオーバーライドするのと同じくらい簡単なはずです。マニフェストにもカスタムサービスを追加してください。

ソースから:

「これをオーバーライドして、ソフト入力領域をユーザーに表示するタイミングを制御します。デフォルトの実装では、ハードキーボードがないか、キーボードが非表示になっている場合にのみ入力ビューが表示されます。これを変更する場合は、updateInputViewShownを呼び出す必要があります。 ()戻り値が変更されて再評価および適用される可能性がある場合は、いつでも自分で確認してください。」

public boolean onEvaluateInputViewShown() {
     Configuration config = getResources().getConfiguration();
     return config.keyboard == Configuration.KEYBOARD_NOKEYS
             || config.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES;
}

ここ はあなたがチェックできる可能な構成です。 Configuration.KEYBOARD_NOKEYSは、ハードウェアキーボードなしに対応します。ハードウェアキーボードがない場合、またはハードウェアキーボードが非表示の場合、このメソッドはtrueを返します(ソフトキーボードを表示する必要があります)。これらのチェックを両方とも削除し、単にtrueを返すと、ハードウェアキーボードが接続されている場合でも、ソフトウェアキーボードが表示されます。

試してください(テストされていません):

public boolean onEvaluateInputViewShown() {
     return true;
}

この戻り値は変更されないため、updateInputViewShown()を自分で呼び出す必要はありません。この方法を別の方法で変更する場合は、この詳細を忘れないでください。

18
Andy Harris

ソフトキーボードは、さまざまなプラットフォームで予期しない動作をする可能性があります。コードの最初に、編集可能な入力コントロールがあることを確認します。たとえば、EditTextがある場合は、次を使用できます。

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);

ただし、次のものを使用するときはいつでも、表示および非表示にすることができます。

//show keyboard:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//hide keyboard :
 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

これらのイベントのいずれかをOnCreateまたはコントロールの他のメソッド内に追加することもできます。

ただし、何らかの理由で上記のいずれかが失敗した場合は、別のキーボードを使用するのが最善の方法です。 コンパスキーボード

[〜#〜]または[〜#〜]

あなたもあなたのものを作ることができます:

キーボードの例 の実装を参照してください inputmethodservice.KeyboardView

ジンジャーブレッドキーボードのソース もご覧ください。

2
Chibueze Opata

アプリに WRITE_SECURE_SETTINGS 権限(システムアプリまたはAndroid Thingsアプリで利用可能))がある場合は、show_ime_with_hard_keyboardシステム設定を設定できます。これによりソフトキーボードも有効になります。ハードキーボードが接続されている場合:

Settings.Secure.putInt(getContentResolver(), "show_ime_with_hard_keyboard", 1);
0
sdabet

これは私のアプリ、興味深いことにキオスクアプリでも機能しました。

これは少し削除されています。IMMがnullかどうかなど、事前にいくつかのチェックを行いました。

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInputFromWindow(someInputView.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
0
nullpotent