2013-01-22 18 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」