押されたキーの「キーコード」を取得する
スマートフォンやタブレットの物理的な「キー」が押された時に、そのキーコードを取得するには「View」クラスの「onKeyDown」イベントを利用します。この「onKeyDown」イベントはソフトウェアキーボードのコードも取得できる場合がありますが、確実ではありませんのでおすすめすることはできません。
サンプルコード①(MainActivity.java)
アプリの詳しい説明はコード内のコメントに記述してあります。
public class MainActivity extends AppCompatActivity {
//オブジェクト・変数を準備
private TextView textView;
private String str;
private String default_message = "キーを押してください";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//オリジナルView(MyView)をセット
setContentView(new MyView(this));
//デフォルトメッセージをセット
str = default_message;
}
//オリジナルView「MyView」
public class MyView extends View {
public MyView(Context context) {
super(context);
//このViewにフォーカスさせる
setFocusable(true);
setFocusableInTouchMode(true);
}
//キーが押された時に呼び出される
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//キーコードの取得と表示する文字列の作成
str = "コード「" + String.valueOf(KeyCode) + "」のキーが押されました";
//表示の更新(onDrawの自動呼び出し)
invalidate();
return super.onKeyDown(keyCode, event);
}
//キーが離された時に呼び出される
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
//デフォルトメッセージをセット
str = default_message;
//表示の更新(onDrawの自動呼出し)
invalidate();
return super.onKeyUp(keyCode, event);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//ペイントの生成とパラメーターのセット
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(50);
paint.setColor(Color.RED);
//テキストを画面に描画
canvas.drawText(str,20,100,paint);
}
}
}
サンプルコード②(activity_main.xml)
レイアウトは、画面の中央にスピードを表示するテキストビューがあるだけのシンプルな構造です。
<TextView
android:id="@+id/keyevent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
実行結果
実行するとアプリは入力待ち状態になります。

ボリュームキー(アップ、またはダウン)を押すと、押されたキーのキーコードが表示されました。

押したボリュームキーを離すとまた入力待ちの状態に戻ります。

END