简介: 我目前正在尝试为我的填字游戏实现EditText
的输入法,其中用户在EditText
中看到类似"____"
的东西。下划线标记缺少字母,输入的第一个字符将填充第一个下划线。 当然谜题中的其他单元格可能已经解决了,因此EditText
文本可能是"ST_CKOV_RF_OW"
。我已经在我自己的输入视图中拥有所有这些功能,这是覆盖了onDraw()
的一个子视图。这工作得很好,除了视图不会出现在一些较低的Android版本上,并且Back键滑过我的输入例程并且无法访问。Android TextWatcher在输入时替换下划线
所以我想我会这样做EditText
,实施TextWatcher
,并罚款,但我不能让它正常工作。我现在正在工作,我可以使用键盘输入字母,但Backspace也不起作用,当然如果用户触摸到EditText
,位置会变得混乱。
public void beforeTextChanged(CharSequence s,int start,int count, int after){
et.removeTextChangedListener(textWatcher);
int position = text.indexOf("_");
if(position==-1) onAnswerEntered(et.getText().toString().replace("_", "")); //finished
else {
et.setSelection(et.getText().toString().indexOf("_"));
et.addTextChangedListener(textWatcher);
}
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
et.removeTextChangedListener(textWatcher);
try {
String currentKey = s.toString().substring(start, start+1);
Logger.log("Current Key", currentKey);
int position = text.indexOf("_");
Logger.log("Current Position _ ", position+"");
//replace _ with key
String sbefore=text.substring(0, position);
String safter=text.substring(position+1, text.length());
text=sbefore+currentKey+safter;
int positionNext = text.indexOf("_");
Logger.log("Next Position _ ", positionNext+"");
if(positionNext==-1) onAnswerEntered(et.getText().toString().replace("_","")); //finished
else {
et.setText(text);
et.setSelection(et.getText().toString().indexOf("_"));
et.addTextChangedListener(textWatcher);
}
} catch(IndexOutOfBoundsException ioobe) {
ioobe.printStackTrace();
}
}
我也试着设置OnKeyListener
,但它不会在EditText
工作(我可以退格事件,没有别的)
所以也许我是完全错误的轨道上,但请大家帮忙我给我一个线索,告诉我如何才能完成我的目标。谢谢。