2013-05-23 16 views
9

Sto provando a impostare un listener su EditText quando il pulsante di invio verrà premuto. Ma non ha sparato affatto. Ho provato questo su LG Nexus 4 con Android 4.2.2. setOnEditorActionListener funziona su Amazon Kindle Fire con Android 2.3 e setImeActionLabel funziona da nessuna parte! Anche io non riesco a impostare il testo per Enter button.Here è il codice:Android setOnEditorActionListener() non attiva

mEditText.setImeActionLabel("Reply", EditorInfo.IME_ACTION_UNSPECIFIED); 
mEditText.setOnEditorActionListener(new OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, 
       KeyEvent event) { 
      Log.d("TEST RESPONSE", "Action ID = " + actionId + "KeyEvent = " + event); 
      return true; 
     } 
    }); 

Che cosa sto facendo di sbagliato? Come posso risolvere questo?

risposta

7

È possibile utilizzare TextWatcher.

editText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
     } 

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

     @Override 
     public void afterTextChanged(Editable s) { 
      if (s.charAt(s.length() - 1) == '\n') { 
        Log.d("TEST RESPONSE", "Enter was pressed"); 
      } 
     } 
    }); 
+0

Grazie. Funziona, ma non sai perché. SetImeActionLabel e setOnEditorActionListener non funziona su Nexus 4 ma funziona su altri dispositivi? – MainstreamDeveloper00

+2

Magic di frammentazione Android. Anche per il mio Galaxy Nexus non funzionano –

+1

Per me le imeOptions funzionavano solo se si imposta singleLine = "true" su EditText. strano e fastidioso che potrebbe essere di progettazione ma è quello che ho trovato. – speedynomads

0

si può provare questa opzione per utilizzare il OnKeyListener

editText.setOnKeyListener(new OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int actionId, KeyEvent event) { 
      Log.d("TEST RESPONSE", "Action ID = " + actionId + "KeyEvent = " + event); 
      return false; 
     } 
    }); 
+0

ancora il lavoro stesso ... Niente – MainstreamDeveloper00

+0

sono nel mio logcat: azione ID = 66KeyEvent = chiave Event {action = ACTION_UP, keyCode = KEYCODE_ENTER, scanCode = 0, metaState = 0, flags = 0x6, repeatCount = 0, eventTime = 653776952, downTime = 653776952, deviceId = -1, source = 0x0} e sto usando il mio codice – vmathieu

+1

Leggi i documenti per View.OnKeyListener, "Questo è utile solo per le tastiere hardware; un metodo di input software non ha l'obbligo di attivare questo listener. "http://developer.android.com/reference/android/view/View.OnKeyListener.html – speedynomads

7

Assicurarsi di avere un IME_ACTION impostato nel file di layout:

<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" /> 

Per una spiegazione completa, vedere http://developer.android.com/guide/topics/ui/controls/text.html.

+0

E questa riga: android: inputType = "text" –

0

L'ho preso, funziona su Edittext in un'attività, ma non in un gruppo.

<EditText 
       android:id="@+id/mEditText" 
       android:imeOptions="actionSearch" 
       android:imeActionLabel="搜索" 
       android:inputType="text" 
       android:singleLine="true" 
       android:textSize="18dp" 
       android:paddingTop="5dp" 
       android:paddingBottom="5dp" 
       android:paddingLeft="3dp" 
       android:paddingRight="3dp" 
       android:textColor="@color/black" 
       android:layout_marginTop="7dp" 
       android:layout_marginBottom="7dp" 
       android:shadowColor="#4b000000" 
       android:shadowDy="1" 
       android:shadowDx="1" 
       android:shadowRadius="1" 
       android:cursorVisible="true" 
       android:textCursorDrawable="@null" 
       android:gravity="center_vertical|left" 
       android:background="@color/transparent" 
       android:layout_width="0dp" 
       android:layout_weight="1" 
       android:layout_height="wrap_content" 
       tools:ignore="UnusedAttribute"> 
      <requestFocus/> 
     </EditText> 


mEditText.setImeActionLabel("搜索", EditorInfo.IME_ACTION_SEARCH); 
    mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
       MToastUtil.show("搜索"); 
      } 
      return false; 
     } 
    }); 
-1

Dopo un po 'po' più di ricerca - questa era la soluzione per me (works also in a fragment):

è sufficiente rimuovere la imeAction

0

assicurarsi che:

InputType = "testo";

imeOptions = "actionSend";

0

Quello che ha funzionato per me è questo, ho aggiunto questo sotto la linea di EditText

android:imeOptions="actionSend" 

questa linea rende tastiera che si apre quando si fa clic sulla modifica del testo ha il tasto invio, invece di ricerca

nel setOnEditorActionListener si sostituisce seguente metodo cerca di azione inviare

@Override 
    public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { 
     if (actionId == EditorInfo.IME_ACTION_SEND) { 
     //implement stuff here 
      } 
     } 
Problemi correlati