2014-07-19 12 views
6

Próbuję ustawić własną wartość na imeActionId, a następnie porównując to samo z actionId w onEditorAction. Ale actionId w metodzie wielokrotnie zwraca 0.Jak korzystać z wartości 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"/> 

I Oto mój 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; 
    } 
}); 

The actionId zbliża się 0 za każdym razem, niezależnie od wartości w pliku XML. Jak używać zdefiniowanego imeActionId do porównania z actionId.

+0

Czy znalazłeś jakieś rozwiązanie? – Hamid

Odpowiedz

1

W rzeczywistości system Android rozpoznaje tylko określone działania, które mają wpływ na wygląd miękkiej klawiatury (np. Obecność przycisku DONE). Wszystkie takie akcje są wymienione na here i nie mają kodu 666. :)

Do czego potrzebna jest niestandardowa akcja? Aby wiedzieć, skąd pochodzi? Następnie po prostu sprawdź identyfikator:

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

      return false; 
     } 

To na pewno zadziała!

+0

Robię to, aby zastąpić actionId jak EditorInfo.IME_ACTION_GO z własnym identyfikatorem.Wiem, że mogę uzyskać identyfikator widoku generującego akcję. Uprzejma aktualizacja, jeśli wiesz, jak sprawdzić dla mojego zdefiniowanego imeActionId. – user2779311

-2

// to pracuje dla mnie

1- usuń android:imeOptions="actionGo" z xml

2- sprawdzić również dla IME_NULL wartości, ponieważ wszystkie te działania są traktowane jako klawiszy specjalnych, na przykład:

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

3- również lepszą praktyką jest trzymanie wszystkiego w plikach zasobów nie na sztywno, więc na przykład utwórz plik zasobów w folderze wartości, wywołaj go ids.xml, a tutaj jak wygląda:

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

a następnie plik XML powinien wyglądać tak:

android:imeActionId="@id/r_browse" 

i kod aktywność powinna wyglądać następująco:

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

Na zdrowie;)

0

Korzystanie android:imeOptions="actionDone" zamiast działa dla mnie:

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

A w kodzie:

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

Przepraszamy za opóźnienie w odpowiedzi. Wciąż zamieszczam moją odpowiedź dla dobra innych. Właściwie każda z nich ma jednoznaczne. Aby wykonać swoje zadanie, możesz skorzystać z poniższego działającego kodu.

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; 
    } 
}); 

Aby uzyskać więcej informacji, możesz odwołać ten LINK. Mam nadzieję, że ta odpowiedź okaże się przydatna.