2010-07-08 7 views
301

Non riesco a capirlo. Alcune app hanno un EditText (casella di testo) che, quando viene toccato e visualizza la tastiera su schermo, la tastiera ha un pulsante "Cerca" invece di un tasto Invio.Android: come rendere il pulsante di immissione della tastiera dire "Cerca" e gestire il suo clic?

Voglio implementarlo. Come posso implementare quel pulsante Cerca e rilevare la pressione del pulsante Cerca?

Modifica: trovato come implementare il pulsante Cerca; in XML, android:imeOptions="actionSearch" o in Java, EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);. Ma come gestisco l'utente che preme quel pulsante Cerca? Ha qualcosa a che fare con ?

+2

Nota che imeOptions potrebbe non funzionare su alcuni dispositivi. Vedi [this] (http://stackoverflow.com/questions/4470018/alternative-of-action-done-button-in-htc-desire) e [this] (http://stackoverflow.com/questions/3886677/ imeoptions-on-htc-dispositivi). – Ermolai

risposta

745

Nel layout impostare le opzioni del metodo di input per la ricerca.

<EditText 
    android:imeOptions="actionSearch" 
    android:inputType="text" /> 

Nella java aggiungere il listener di azioni dell'editor.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
      performSearch(); 
      return true; 
     } 
     return false; 
    } 
}); 
+0

cosa succede se vogliamo ottenere le chiavi su cui l'utente fa clic, come a, b, c? – ozmank

+72

Su os 2.3.6 non funziona finché non applico android: inputType = "text". – thanhbinh84

+0

Non dovrebbero invece entrambi quelli di TextView pronunciare EditText? – Carol

3

In xml di file, mettere imeOptions="actionSearch" e inputType="text", maxLines="1":

<EditText 
    android:id="@+id/search_box" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/search" 
    android:imeOptions="actionSearch" 
    android:inputType="text" 
    android:maxLines="1" /> 
5

Nascondi tastiera quando l'utente fa clic su ricerca. Aggiunta a Robby Pond answer

private void performSearch() { 
    editText.clearFocus(); 
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0); 
    ...perform search 
}