I'm trying to build my first Android keyboard, and I think it's working fine, but I'm not understanding how to make my "Done / Enter" button confirm the action (e.g. send a message or browse).
I read Android detect Done key press for OnScreen Keyboard
... however, as I'm new to android, java, &c, I'm not really sure how am I supposed to integrate the section:
editText = (EditText) findViewById(R.id.edit_text);
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// do your stuff here
}
return false;
}
});
... into something like this:
public class FlipKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
private KeyboardView kv;
private Keyboard ac_keyboard, mn_keyboard, m2_keyboard, m3_keyboard;
private Keyboard _a_keyboard, _b_keyboard, _c_keyboard, _d_keyboard, _e_keyboard, _f_keyboard;
private Keyboard _g_keyboard, _h_keyboard, _i_keyboard, _j_keyboard, _k_keyboard, _l_keyboard;
private Keyboard _m_keyboard, _n_keyboard, _o_keyboard, _p_keyboard, _ps_keyboard, _q_keyboard, _r_keyboard;
private Keyboard _s_keyboard, _t_keyboard, _th_keyboard, _u_keyboard, _v_keyboard, _w_keyboard, _x_keyboard;
private Keyboard _y_keyboard, _z_keyboard;
private Keyboard _amp_keyboard, _com_keyboard, _par_keyboard, _pil_keyboard, _pon_keyboard;
private Keyboard _que_keyboard, _quo_keyboard, _tha_keyboard, _adm_keyboard, _hyp_keyboard;
private Keyboard _ope_keyboard;
private boolean isCaps = false;
private long ms_Press;
@Override
public View onCreateInputView() {
kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null );
mn_keyboard = new Keyboard(this, R.xml.qwerty);
m2_keyboard = new Keyboard(this, R.xml.qwerty__symbl);
_amp_keyboard = new Keyboard(this, R.xml.qwerty__amper);
_com_keyboard = new Keyboard(this, R.xml.qwerty__comma);
_par_keyboard = new Keyboard(this, R.xml.qwerty__parena);
_pil_keyboard = new Keyboard(this, R.xml.qwerty__pilcr);
_pon_keyboard = new Keyboard(this, R.xml.qwerty__pontr);
_que_keyboard = new Keyboard(this, R.xml.qwerty__quest);
_adm_keyboard = new Keyboard(this, R.xml.qwerty__excla);
_quo_keyboard = new Keyboard(this, R.xml.qwerty__quote);
_tha_keyboard = new Keyboard(this, R.xml.qwerty__that);
_hyp_keyboard = new Keyboard(this, R.xml.qwerty__hyphe);
_ope_keyboard = new Keyboard(this, R.xml.qwerty__opera);
_a_keyboard = new Keyboard(this, R.xml.qwerty_a);
_b_keyboard = new Keyboard(this, R.xml.qwerty_b);
_c_keyboard = new Keyboard(this, R.xml.qwerty_c);
_d_keyboard = new Keyboard(this, R.xml.qwerty_d);
_e_keyboard = new Keyboard(this, R.xml.qwerty_e);
_f_keyboard = new Keyboard(this, R.xml.qwerty_f);
_g_keyboard = new Keyboard(this, R.xml.qwerty_g);
_i_keyboard = new Keyboard(this, R.xml.qwerty_i);
_k_keyboard = new Keyboard(this, R.xml.qwerty_k);
_l_keyboard = new Keyboard(this, R.xml.qwerty_l);
_m_keyboard = new Keyboard(this, R.xml.qwerty_m);
_n_keyboard = new Keyboard(this, R.xml.qwerty_n);
_o_keyboard = new Keyboard(this, R.xml.qwerty_o);
_p_keyboard = new Keyboard(this, R.xml.qwerty_p);
_ps_keyboard = new Keyboard(this, R.xml.qwerty_ps);
_q_keyboard = new Keyboard(this, R.xml.qwerty_q);
_r_keyboard = new Keyboard(this, R.xml.qwerty_r);
_s_keyboard = new Keyboard(this, R.xml.qwerty_s);
_t_keyboard = new Keyboard(this, R.xml.qwerty_t);
_th_keyboard = new Keyboard(this, R.xml.qwerty_th);
_u_keyboard = new Keyboard(this, R.xml.qwerty_u);
_w_keyboard = new Keyboard(this, R.xml.qwerty_w);
_x_keyboard = new Keyboard(this, R.xml.qwerty_x);
_z_keyboard = new Keyboard(this, R.xml.qwerty_z);
ac_keyboard = mn_keyboard;
kv.setKeyboard(ac_keyboard);
kv.setOnKeyboardActionListener(this);
return kv;
}
@Override
public void onPress(int i) {
ms_Press = System.currentTimeMillis();
}
@Override
public void onRelease(int i) {
}
@Override
public void onKey(int i, int[] ints) {
InputConnection ic = getCurrentInputConnection();
switch(i)
{
case Keyboard.KEYCODE_DELETE:
ic.deleteSurroundingText(1, 0);
break;
case Keyboard.KEYCODE_SHIFT:
isCaps = !isCaps;
ac_keyboard.setShifted(isCaps);
kv.invalidateAllKeys();
break;
case Keyboard.KEYCODE_DONE:
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
break;
case Keyboard.KEYCODE_ALT:
ac_keyboard = m2_keyboard;
kv.setKeyboard(ac_keyboard);
break;
case Keyboard.KEYCODE_MODE_CHANGE:
ac_keyboard = mn_keyboard;
kv.setKeyboard(ac_keyboard);
break;
default:
// ... Independent XML established per key...
}
kv.setKeyboard(ac_keyboard);
break;
}
else if (Character.isLetter(code) && isCaps) {
code = Character.toUpperCase(code);
ic.commitText(String.valueOf(code), 1);
}
else {
ic.commitText(String.valueOf(code), 1);
}
}
}
Not sure if I'm supposed to place this "editText" code into my public class, or what else.