21

なぜ私はそれが欲しいのかとあなたは尋ねるかもしれません。理由は次のとおりです。

アプリケーションのログイン画面にバーコード スキャナーを使用しました。ただし、バーコード スキャナーを接続すると、タブレットが物理キーボードを使用するようになり (スキャナーがキーボードであると見なされます)、仮想キーボードが表示されなくなります (他の画面ではこれが必要です)。仮想キーボードがポップアップするように物理キーボードを無効にするには、システム バーを手動でクリックする必要があります。

では、コードで物理キーボードを無効にする方法や、「キーボード」が接続されていても仮想キーボードを表示させる方法はありますか?

4

6 に答える 6

8

以下を試してください

Settings> Language & Input> 下のをKeyboard and input methodsクリックしますDefault。ハードウェア/物理キーボードのチェックを外したり無効にしたりするオプションはありますか?

直感的ではありませんが、それを行った後、デバイスで物理キーボードと仮想キーボードの両方を使用できます (Android 4.2)

于 2012-11-30T09:24:40.943 に答える
3

これは、あなたのケースに関連しているようです。構成クラスのドキュメントから。

public int hardKeyboardHidden --- API レベル 3 で追加

ハード キーボードが非表示になっているかどうかを示すフラグ。これは、キーボードをユーザーから隠すメカニズムを備えたデバイスで、そのメカニズムが閉じられたときに設定されます。HARDKEYBOARDHIDDEN_NO、HARDKEYBOARDHIDDEN_YES のいずれか。

この構成変更に対して何らかのアクションを実行できます。しかし、Androidで物理キーボードを無効にする方法はないと思います。

アップデート

そこには、ユーザーのハードウェア キーボード設定を反映するために使用される へmHardKeyboardSwitchの参照を保持するプライベート メンバーがあります。SwitchViewそのクラスの外ではアクセスできないため、ハードウェア キーボードを無効にするために使用することはできません。

于 2012-11-24T06:08:48.367 に答える
3

はい、バーコード スキャナーは物理キーボードとして検出されます。キーボードがデバイスに接続されている場合、デフォルトではソフト キーボードは無効になっています。有効にするには、次の方法でハードウェア キーボードをオフにする必要があります。

設定 > 言語と入力 > 入力方法の選択

オプション名はデバイスによって異なる場合があります。スキャナーをオフにしても、ソフトキーボードと一緒にスキャナーを使用できます。

いいえ、現在、プログラムでこれを実現する方法はありません。onConfigurationChanged私たちができることは、スキャナー/キーボードが接続されていることを検出し、次のようにメソッドをオーバーライドして、ユーザーを入力方法選択ウィンドウにリダイレクトすることです。

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  if(newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {

    ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
                                  .showInputMethodPicker();
    Toast.makeText(this, "Barcode Scanner detected. Please turn OFF Hardware/Physical keyboard to enable softkeyboard to function.", Toast.LENGTH_LONG).show();
  }
}
于 2014-06-18T14:16:27.750 に答える
2

マニフェスト ファイルで指定して、softinputmode で使用し、keyboard|keyboard_hidden の設定変更を処理できると思います

于 2012-11-28T00:04:25.763 に答える
0

AFS を変更して再構築することができます。mydroid/frameworks/base/services/java/com/android/server/wm にある WindowManagerService.java を開きます

次のような行を見つけます。

if (hardKeyboardAvailable != mHardKeyboardAvailable) {
     mHardKeyboardAvailable = hardKeyboardAvailable;
     mHardKeyboardEnabled = hardKeyboardAvailable;
     mH.removeMessages(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
     mH.sendEmptyMessage(H.REPORT_HARD_KEYBOARD_STATUS_CHANGE);
}

3 行を次のように置き換えます。mHardKeyboardEnabled = false;

于 2015-02-26T15:19:54.587 に答える