2011-09-30 10 views
14

Chcę zrobić kilka rzeczy na klawiaturze miękkiej naciśnij klawisz. Zobacz mój kod i wynik poniżej. Wykonuje dwa razy, ale chcę, aby był wykonywany tylko raz. Jak to naprawić?Miękka klawiatura wprowadź kluczowy uchwyt zdarzenia

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    txt = (EditText)findViewById(R.id.txt); 
    txt.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_ENTER) { 
       Log.e("test","--------- on enter"); 
       return false; 
      } 
      return false; 
     } 
    }); 
} 

This is my output for this

Odpowiedz

19

najlepszy możliwy sposób:

if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) { 
    Log.d(TAG, "enter_key_called"); 
} 
+2

prawdopodobnie powinien iść do ACTION_UP zamiast, tak więc użytkownik może anulować zdarzenie mój zdejmując lub jej palec? I dodaj KeyEvent.KEYCODE_DPAD_CENTER dla tych. – Kenneth

+0

https://developer.android.com/reference/android/view/View.OnKeyListener.html: 'Wywoływany, gdy klucz sprzętowy jest wywoływany do widoku.". To nie zadziała dla miękkiej klawiatury. – mbonnin

+0

ustawienie inputType = "text" w widoku EditText, sprawia, że ​​działa on dla mnie na klawiaturze programowalnej – SammyT

Powiązane problemy