title: How to capture soft keyboard input in a View?
body: <p>I have a subclassed View that pops up the keyboard when it receives a 'touch up' in onTouchEvent.  It shows this by requesting focus, retrieving the InputMethodManager, and then calling showSoftInput.</p>
  
  <p>Now I need to figure out how to capture the tapped letters of the soft keyboard, <em>as they are pressed</em>.  I am currently only getting a response when the Next/Done button is pressed on the soft keyboard. </p>
  
  <p>Here is my class:</p>
  
  <pre><code>public class BigGrid extends View {
  
      private static final String TAG = "BigGrid";
  
      public BigGrid(Context context) {
          super(context);
          setFocusableInTouchMode(true); // allows the keyboard to pop up on
                                         // touch down
  
          setOnKeyListener(new OnKeyListener() {
              public boolean onKey(View v, int keyCode, KeyEvent event) {
                  Log.d(TAG, "onKeyListener");
                  if (event.getAction() == KeyEvent.ACTION_DOWN) {
                      // Perform action on key press
                      Log.d(TAG, "ACTION_DOWN");
                      return true;
                  }
                  return false;
              }
          });
      }
  
      @Override
      public boolean onTouchEvent(MotionEvent event) {
          super.onTouchEvent(event);
          Log.d(TAG, "onTOUCH");
          if (event.getAction() == MotionEvent.ACTION_UP) {
  
              // show the keyboard so we can enter text
              InputMethodManager imm = (InputMethodManager) getContext()
                      .getSystemService(Context.INPUT_METHOD_SERVICE);
              imm.showSoftInput(this, InputMethodManager.SHOW_FORCED);
          }
          return true;
      }
  
      @Override
      public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
          Log.d(TAG, "onCreateInputConnection");
  
          BaseInputConnection fic = new BaseInputConnection(this, true);
          outAttrs.actionLabel = null;
          outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
          outAttrs.imeOptions = EditorInfo.IME_ACTION_NEXT;
          return fic;
      }
  
      @Override
      public boolean onCheckIsTextEditor() {
          Log.d(TAG, "onCheckIsTextEditor");
          return true;
      }
  
      @Override
      public void onDraw(Canvas canvas) {
          super.onDraw(canvas);
  
          canvas.drawColor(R.color.grid_bg);
          // .
          // .
          // alot more drawing code...
          // .
      }
  }
  </code></pre>
  
  <p>The keyboard shows, but my onKeyListener only fires when I press the 'Next' button on the keyboard.  I need which character is tapped, so that I can display it in my onDraw() method.</p>