C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

キーイベントを発生させるには, キーイベント(KeyEvent)クラスとdispatchKeyEventメソッドを利用する.

キーイベントの発行

  • MainActivity.java
    • KeyEventクラスのコンストラクタに, ACTION, KEYCODE等を指定してキーイベントを生成する.
   注) SHIFTやCTRLキー等との組み合わせキーイベントも発行可能.
    • dispatchKeyEventメソッドで, キーイベントを発行する.
package com.moonlight_aska.android.keyevent01;

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements View.OnClickListener {
  Button btnAlpha1 = null;
  Button btnAlpha2 = null;
  EditText txtInput = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnAlpha1 = (Button)findViewById(R.id.alpha1);
    btnAlpha1.setOnClickListener(this);
    btnAlpha2 = (Button)findViewById(R.id.alpha2);
    btnAlpha2.setOnClickListener(this);
    txtInput = (EditText)findViewById(R.id.input);
  }

  @Override
  public void onClick(View v) {
    // TODO Auto-generated method stub
    txtInput.requestFocus();
    if (v == btnAlpha1) { // 通常のキー(KeyEvent.KEYCODE_XXXX)
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));  // KeyDownイベント
      dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));  // KeyUPイベント
    }
    else if (v == btnAlpha2) { // アルファべトの大文字
      dispatchKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A, 1, KeyEvent.META_SHIFT_ON));
    }
  }

  @Override
  public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    Log.v("KeyEvent", "KeyCode = " + event.getKeyCode());
    return super.dispatchKeyEvent(event);
  }
}
  • 動作例




コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

Firebase(2)

AD



管理人/副管理人のみ編集できます