2013-01-22 27 views
0

简介: 我目前正在尝试为我的填字游戏实现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工作(我可以退格事件,没有别的)

所以也许我是完全错误的轨道上,但请大家帮忙我给我一个线索,告诉我如何才能完成我的目标。谢谢。

回答

0

我放弃了它,并实施了一个简单但工作的黑客。我现在在我的(隐藏的)EditText中接收输入,输出进入可见的TextView,中间的函数用“EditText”中的输入填充“_”。例如,

提示= “A_A_A_A” 的EditText输入= “BBB” TextView中示出了 “ABABABA”