2014-07-19 21 views
6

Sto tentando di impostare il mio valore su imeActionId e quindi di confrontare lo stesso con actionId nello onEditorAction. Ma il actionId nel metodo restituisce ripetutamente 0.Come utilizzare il valore di imeactionId

<EditText 
     android:id="@+id/editText2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="text|textUri" 
     android:imeOptions="actionGo" 
     android:imeActionId="666" 
     android:imeActionLabel="google"/> 

E il seguente è il mio onEditorAction:

et.setOnEditorActionListener(new OnEditorActionListener() { 

    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     // TODO Auto-generated method stub 
     Log.v("myid iss", "" + actionId); 

     if(actionId == 666) 
     { 
      Intent i = new Intent(Intent.ACTION_VIEW); 
      i.setData(Uri.parse("http://" + v.getText().toString())); 

      imm.hideSoftInputFromInputMethod(v.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 
      startActivity(i); 
     } 
     return false; 
    } 
}); 

Il actionId è venuta a 0 ogni volta indipendentemente dal valore del XML. Come utilizzare il valore definito imeActionId da confrontare con actionId.

+0

Hai già trovato qualche soluzione? – Hamid

risposta

1

In realtà Android riconosce solo azioni specifiche che influiscono sull'aspetto della tastiera virtuale (ad esempio, presenza del pulsante DONE). Tutte queste azioni sono elencate here e nessuno dei due ha il codice 666. :)

Per cosa è necessaria un'azione personalizzata? Per sapere da dove viene? Quindi basta controllare l'id della vista:

 public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (v.getId() == R.id.editText2) { 
       // Whatever ... 
       return true; 
      } 

      return false; 
     } 

Questo funzionerà sicuramente!

+0

Lo sto facendo per sostituire actionId come EditorInfo.IME_ACTION_GO con il mio id.so che posso ottenere l'id della vista che genera l'action.kindly update se sai come controllare il mio imeActionId definito. – user2779311

-2

// questo sta lavorando per me

1- Togliere android:imeOptions="actionGo" dalla xml

2- verifica anche per IME_NULL valore dal momento che tutte queste azioni sono considerate come tasti speciali, per esempio:

if(actionId==666 || actionId == EditorInfo.IME_NULL){ 
    ... 
} 

3- anche una pratica migliore è quella di mantenere tutto nei file risorse non hardcoded, quindi per esempio creare un file di risorse nella cartella valori chiamarlo ids.xml, e qui come appare:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item type="id" name="r_login" format="integer">1001</item> 
</resources> 

e quindi il file XML di layout dovrebbe essere simile:

android:imeActionId="@id/r_browse" 

e il tuo codice di attività dovrebbe essere simile:

if(actionId==R.id.r_browse || actionId == EditorInfo.IME_NULL){ 
    ... 
} 

Saluti;)

0

Uso android:imeOptions="actionDone" funziona invece per me:

<com.fiverr.fiverr.Views.FVREditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textMultiLine" 
     android:imeActionLabel="Create" 
     android:imeActionId="@integer/editor_create_action_id" 
     android:imeOptions="actionDone" 
     android:lines="1" 
     android:maxLines="2"/> 

E in codice:

setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      customActionId = getResources().getInteger(R.integer.editor_create_action_id) 
      if (actionId == customActionId) { 
       onDonePressedRunnable.run(); 
      } 
      return false; 
     } 
    }); 
3

Ci scusiamo per ritardo di risposta. Sto ancora postando la mia risposta a beneficio degli altri. In realtà, ogni imeoption ha un valore ingiusto. Per eseguire il tuo compito, puoi utilizzare il seguente codice operativo.

editText.setOnEditorActionListener(new OnEditorActionListener() { 
@Override 
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    boolean handled = false; 
    if (actionId == EditorInfo.IME_ACTION_GO) { 
     //Perform your Actions here. 

    } 
    return handled; 
    } 
}); 

Per ulteriori informazioni, è possibile consultare questo LINK. Spero che trovi utile questa risposta.

Problemi correlati