2010-12-15 16 views

Odpowiedz

116

Robisz to ustawiając OnKeyListener na swoim EditText.

Oto przykład z mojego własnego kodu. Mam EditText o nazwie addCourseText, który wywoła funkcję addCourseFromTextBox po kliknięciu klawisza Enter lub D-Pad.

addCourseText = (EditText) findViewById(R.id.clEtAddCourse); 
addCourseText.setOnKeyListener(new OnKeyListener() 
{ 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) 
     { 
      switch (keyCode) 
      { 
       case KeyEvent.KEYCODE_DPAD_CENTER: 
       case KeyEvent.KEYCODE_ENTER: 
        addCourseFromTextBox(); 
        return true; 
       default: 
        break; 
      } 
     } 
     return false; 
    } 
}); 
+0

Wielkie dzięki, działa świetnie –

+4

Właściwie, to nie jest gwarantowane przez miękki klawiatura. Na przykład nie działa dla "ENTER" na Nexusie 7 (Android 4.2), a dla "BACK" tak. – Ghedeon

+0

NAJLEPSZY przykład, jaki widziałem! –

24

może można dodać atrybut do EditText tak:

android:imeOptions="actionSearch" 
+1

To jest prostsze rozwiązanie, jeśli tworzysz tekst do edycji. – stevyhacker

5

dodać atrybut do EditText jak android: imeOptions = "actionSearch"

to jest najlepszy sposób, aby wykonać funkcję

, a imeOptions mają również inne wartości, takie jak "idź", "następny", "zrobione" itd.

0

Aby uniknąć przechodzenia do następnego edytowalnego pola (jeśli je posiadasz), możesz zignorować zdarzenia blokowania, ale zajmij się zdarzeniami kluczowania. Ja także wolę filtrować najpierw na keyCode, zakładając, że byłby nieznacznie bardziej wydajny. Przy okazji pamiętaj, że powrót do prawdziwej oznacza, że ​​masz do czynienia z wydarzeniem, więc żaden inny słuchacz nie będzie. Tak czy inaczej, oto moja wersja.

ETFind.setOnKeyListener(new OnKeyListener() 
{ 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER 
     || keyCode == KeyEvent.KEYCODE_ENTER) { 

      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       // do nothing yet 
      } else if (event.getAction() == KeyEvent.ACTION_UP) { 
         findForward();  
      } // is there any other option here?... 

      // Regardless of what we did above, 
      // we do not want to propagate the Enter key up 
      // since it was our task to handle it. 
      return true; 

     } else { 
      // it is not an Enter key - let others handle the event 
      return false; 
     } 
    } 

}); 
27
<EditText 
    android:id="@+id/search" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/search_hint" 
    android:inputType="text" 
    android:imeOptions="actionSend" /> 

Następnie można słuchać naciska na przycisku akcji poprzez zdefiniowanie TextView.OnEditorActionListener dla elementu EditText. W swoim odbiorniku odpowiedz na odpowiedni identyfikator akcji IME zdefiniowany w klasie EditorInfo, na przykład IME_ACTION_SEND. Na przykład:

EditText editText = (EditText) findViewById(R.id.search); 
editText.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     boolean handled = false; 
     if (actionId == EditorInfo.IME_ACTION_SEND) { 
      sendMessage(); 
      handled = true; 
     } 
     return handled; 
    } 
}); 

Źródło: https://developer.android.com/training/keyboard-input/style.html

1

to jest próbka jednego z mojej aplikacji, jak sobie radzić

//searching for the Edit Text in the view  
    final EditText myEditText =(EditText)view.findViewById(R.id.myEditText); 
     myEditText.setOnKeyListener(new View.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN) 
         if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || 
          (keyCode == KeyEvent.KEYCODE_ENTER)) { 
           //do something 
           //true because you handle the event 
           return true; 
           } 
         return false; 
         } 
     }); 
Powiązane problemy