Android Tutorial - User Event : Key

 Key event listener

    
package app.test;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class Test extends Activity {

  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    ListView myListView = (ListView) findViewById(R.id.myListView);
    final EditText myEditText = (EditText) findViewById(R.id.myEditText);
    final ArrayList<String> todoItems = new ArrayList<String>();
    final ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, todoItems);
    myListView.setAdapter(aa);
    myEditText.setOnKeyListener(new OnKeyListener() {
      public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN)
          if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            todoItems.add(0, myEditText.getText().toString());
            myEditText.setText("");
            aa.notifyDataSetChanged();
            return true;
          }
        return false;
      }
    });
  }
}

//main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <EditText
    android:id="@+id/myEditText"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="New To Do Item"
  />
  <ListView  
    android:id="@+id/myListView"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
  />
</LinearLayout>
Soft keyboard get Char
//package com.mediaportal.ampdroid.utils;

import android.view.KeyEvent;

public class SoftkeyboardUtils {

   public static String getChar(int keyCode) {
      switch (keyCode) {
      case KeyEvent.KEYCODE_0:
         return "0";
      case KeyEvent.KEYCODE_1:
         return "1";
      case KeyEvent.KEYCODE_2:
         return "2";
      case KeyEvent.KEYCODE_3:
         return "3";
      case KeyEvent.KEYCODE_4:
         return "4";
      case KeyEvent.KEYCODE_5:
         return "5";
      case KeyEvent.KEYCODE_6:
         return "6";
      case KeyEvent.KEYCODE_7:
         return "7";
      case KeyEvent.KEYCODE_8:
         return "8";
      case KeyEvent.KEYCODE_9:
         return "9";
      case KeyEvent.KEYCODE_A:
         return "a";
      case KeyEvent.KEYCODE_B:
         return "b";
      case KeyEvent.KEYCODE_C:
         return "c";
      case KeyEvent.KEYCODE_D:
         return "d";
      case KeyEvent.KEYCODE_E:
         return "e";
      case KeyEvent.KEYCODE_F:
         return "f";
      case KeyEvent.KEYCODE_G:
         return "g";
      case KeyEvent.KEYCODE_H:
         return "h";
      case KeyEvent.KEYCODE_I:
         return "i";
      case KeyEvent.KEYCODE_J:
         return "j";
      case KeyEvent.KEYCODE_K:
         return "k";
      case KeyEvent.KEYCODE_L:
         return "l";
      case KeyEvent.KEYCODE_M:
         return "m";
      case KeyEvent.KEYCODE_N:
         return "n";
      case KeyEvent.KEYCODE_O:
         return "o";
      case KeyEvent.KEYCODE_P:
         return "p";
      case KeyEvent.KEYCODE_Q:
         return "q";
      case KeyEvent.KEYCODE_R:
         return "r";
      case KeyEvent.KEYCODE_S:
         return "s";
      case KeyEvent.KEYCODE_T:
         return "t";
      case KeyEvent.KEYCODE_U:
         return "u";
      case KeyEvent.KEYCODE_V:
         return "v";
      case KeyEvent.KEYCODE_W:
         return "w";
      case KeyEvent.KEYCODE_X:
         return "x";
      case KeyEvent.KEYCODE_Y:
         return "y";
      case KeyEvent.KEYCODE_Z:
         return "z";
      case KeyEvent.KEYCODE_DEL:
         return "{BKSP}";
      case KeyEvent.KEYCODE_ENTER:
      case KeyEvent.KEYCODE_DPAD_CENTER:
         return "{ENTER}";
      case KeyEvent.KEYCODE_SPACE:
         return " ";
      case KeyEvent.KEYCODE_DPAD_DOWN:
         return "{DOWN}";
      case KeyEvent.KEYCODE_DPAD_UP:
         return "{UP}";
      case KeyEvent.KEYCODE_DPAD_LEFT:
         return "{LEFT}";
      case KeyEvent.KEYCODE_DPAD_RIGHT:
         return "{RIGHT}";
      }
      return null;
   }

}
show hide virtual keyboard
//package com.seirion.btetris.util;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

public class BVirtualKeyboardUtil {
  
  private BVirtualKeyboardUtil() {}
  
  /**
   * show virtual keyboard.
   * @param activity the activity to show the keyboard.
   * @param input edit which gets focus  
   */
  public static void showInputMethod(final Activity activity, final EditText input){
    TimerTask myTask = new TimerTask(){
      public void run(){
        InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(input, InputMethodManager.SHOW_IMPLICIT);
        }
    };
    
    Timer timer = new Timer();
    timer.schedule(myTask, 100);
  }
  
  /**
   * hide virtual keyboard.
   * @param activity the activity.
   */
  public static void hideInputMethod(final Activity activity){
    
    TimerTask myTask = new TimerTask(){
      public void run(){
        InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
      }
    };
    
    Timer timer = new Timer();
    timer.schedule(myTask, 100);
  }
}

has Physical Keyboard

    
import android.content.Context;
import android.content.res.Configuration;

class Main {
  public static boolean hasPhysicalKeyboard(Context context) {
    int keyboard = context.getResources().getConfiguration().keyboard;
    return keyboard == Configuration.KEYBOARD_QWERTY;
  }

}

Show Keyboard

    

import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

class Main {
  public static void showKeyboard(final Context context, final EditText input) {
    // Never explicitly open soft keyboard if physical keyboard is present

    input.post(new Runnable() {
      public void run() {
        InputMethodManager imm = (InputMethodManager) context
            .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(input, InputMethodManager.SHOW_FORCED);
      }
    });

  }

}

Hide Keyboard

    

import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

class Main {
  public static void hideKeyboard(Context context, EditText input)
  {
    InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
  }

}

intrepret Direction Key

    

import android.view.KeyEvent;

 class KeyUtils {
  private KeyUtils() {}
  
  public static int intrepretDirection(int code) {
    switch(code) {
    case KeyEvent.KEYCODE_LEFT_BRACKET:
    case KeyEvent.KEYCODE_DPAD_LEFT:
    case KeyEvent.KEYCODE_1:
    case KeyEvent.KEYCODE_4:
    case KeyEvent.KEYCODE_7:
      return KeyEvent.KEYCODE_DPAD_LEFT;
      
    case KeyEvent.KEYCODE_RIGHT_BRACKET:
    case KeyEvent.KEYCODE_DPAD_RIGHT:
    case KeyEvent.KEYCODE_3:
    case KeyEvent.KEYCODE_6:
    case KeyEvent.KEYCODE_9:
      return KeyEvent.KEYCODE_DPAD_RIGHT;
    }
    
    return code;
  }
}