USBキーボードが接続されたソフトウェアキーボード(私の場合はRFIDリーダー)を表示する方法はありますか?
InputManagerを使用して(これらまたは同様のパラメーターを使用して)強制的に表示しようとしましたが、うまくいきませんでした
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
重要なお知らせ-ステータス/システムバーに表示するボタンがあることは知っていますが、このボタンはユーザーには表示されません(キオスクアプリ)。
ハードキーボードがある場合でも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()を自分で呼び出す必要はありません。この方法を別の方法で変更する場合は、この詳細を忘れないでください。
ソフトキーボードは、さまざまなプラットフォームで予期しない動作をする可能性があります。コードの最初に、編集可能な入力コントロールがあることを確認します。たとえば、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
ジンジャーブレッドキーボードのソース もご覧ください。
アプリに WRITE_SECURE_SETTINGS 権限(システムアプリまたはAndroid Thingsアプリで利用可能))がある場合は、show_ime_with_hard_keyboard
システム設定を設定できます。これによりソフトキーボードも有効になります。ハードキーボードが接続されている場合:
Settings.Secure.putInt(getContentResolver(), "show_ime_with_hard_keyboard", 1);
これは私のアプリ、興味深いことにキオスクアプリでも機能しました。
これは少し削除されています。IMMがnullかどうかなど、事前にいくつかのチェックを行いました。
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInputFromWindow(someInputView.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);