2013-04-11 116 views
2

我想改變鍵盤輸入,更改鍵盤輸入文字的Android

例子:

當用戶按下一個,它會播放c

我試圖用TextWatcher和它掛起,因爲在撥打setText之後,它將再次到達TextWatcher事件。所以,它會陷入僵局,無法工作。

setOnKeyListener也不起作用。輸入時會出現onKey事件。當我按a或b時沒有到達。

可以在EditText Android中更改文本輸入鍵嗎?

更新:setOnKeyListener

final EditText edittext = (EditText) findViewById(R.id.editText1); 

     edittext.setOnKeyListener(new OnKeyListener() { 


      @Override 
      public boolean onKey(View arg0, int keycode, KeyEvent event) { 
       // TODO Auto-generated method stub 
       Log.i("onKey", "Arrive Keypress"); 
       if (event.getAction()!=KeyEvent.ACTION_DOWN) 
        return true; 

       if (event != null&& (keycode == KeyEvent.KEYCODE_ENTER)) { 

        applySearch(); 
        return true; 
       } 

       return false; 
      } 


     }); 
+1

'setOnKeyListener' should work。請你的代碼。 – 2013-04-11 13:58:29

+0

@AleksG,更新了問題。 – saturngod 2013-04-11 14:07:19

+0

您正在明確檢查正在輸入的鍵碼 - 當然這對其他鍵無效。 – 2013-04-11 14:10:20

回答

3

使用TextWatcher,但使用它的智能。當您撥打setText創建boolean flag == true,並檢查這個flag每次onTextChanged。希望它的幫助。

public class MyActivity extends Activity implements TextWatcher { 

EditText et; 
boolean flag; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    et=(EditText) findViewById(R.id.et); 
    et.addTextChangedListener(this); 

} 


@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

} 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    if(flag) 
    { 
     flag = false; 
     return; 
    } 
    else 
    { 
     //do same staff 
     flag = true; 
     et.setText("new text"); 
    } 
} 

@Override 
public void afterTextChanged(Editable s) { 

} 
} 
0

是其可行,我用吊帶鍵盤(你可以發現這個程序在谷歌播放)。您可以選擇它作爲下您的手機鍵盤設置默認值。

RGDS,

安巴爾

+1

這不是OP詢問的問題。他希望以編程方式更改輸入,而不管使用何種鍵盤。 – 2013-04-11 14:12:20