2014-12-31 13 views
22

Mam aktywność z edittext. kiedy przychodzi aktywność, zawsze skupiam się na Edittext. zrobiłem softkeyboard zawsze widoczny, dającZapobieganie odrzucaniu klawisza programowalnego na klawiaturze systemu Android Naciśnij przycisk

android:windowSoftInputMode="stateAlwaysVisible" 

w manifeście. Robię funkcjonalność po naciśnięciu przycisku na klawiaturze programowej. W rzeczywistości moja potrzeba jest softkeyboard powinien zawsze obecny, gdy użytkownik jest na tej działalności. teraz wyłączam przycisk Wstecz naciskając, przez przesłonięcie i nic nie rób.

@Override 
public void onBackPressed() { 
    // Do nothing 
} 

ale softkeyboard odrzuca na tylnym panelu. jak się tego pozbyć. Próbowałem tego Prevent soft keyboard from being dismissed, ale wciąż na klawiaturze z powrotem naciśnij się. Ale wraca przez ponowne naciśnięcie przycisku Wstecz, Moja potrzeba to backpress nie powinna odrzucić softkeyboard. Każda pomoc zostanie doceniona.

+1

@HareshChhelana przeczytać pytanie całkowicie –

+2

moim zamiarem nie jest zamykanie/ukrywanie softkeyboard. Jego zapobieganie zamykaniu klawiatury na przycisku wstecz naciśnij –

+0

To nie jest powielone pytanie. Dlaczego nie czytasz dokładnie tego pytania i po prostu zaznaczasz je jako powielone? –

Odpowiedz

13

utworzyć jeden niestandardowy EditText jak postępować z jednego interfejsu:

public class CustomEditText extends EditText { 


    public void setHandleDismissingKeyboard(
     handleDismissingKeyboard handleDismissingKeyboard) { 
      this.handleDismissingKeyboard = handleDismissingKeyboard; 
    } 

    private handleDismissingKeyboard handleDismissingKeyboard; 

    public interface handleDismissingKeyboard { 
     public void dismissKeyboard(); 
    } 

    @SuppressLint("NewApi") 
    public CustomEditText(Context context, AttributeSet attrs, 
          int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     // TODO Auto-generated constructor stub 
    } 

    public CustomEditText(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    public CustomEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     // TODO Auto-generated constructor stub 
    } 


    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK 
       && event.getAction() == KeyEvent.ACTION_UP) { 
      handleDismissingKeyboard.dismissKeyboard(); 
      return true; 
     } 
     return super.dispatchKeyEvent(event); 
    } 

następnie w swojej działalności stworzenia zainicjować CustomEditText i zastosowanie:

customEditText.setHandleDismissingKeyboard(this); 

następnie wdrożyć klasy i zastąpić metodę i umieścić kod w że

po więcej informacji na temat mojej odpowiedzi wszystko, czego potrzebujesz, to onKeyPreIme, możesz to zmienić w swojej klasie EditText (ponieważ ja post), aby obsłużyć wszystkie klucze, takie jak Back Key lub inny klucz klawiatury, umieszczam jeden interfejs wewnętrzny w klasie niestandardowej, aby uzyskać oddzwonienie z tej klasy do każdej aktywności lub klasy, którą chcesz, możesz to zrobić za pomocą również metodą statyczną, a jeśli chcesz uniknąć odrzucania klawiatury, możesz po prostu w tym celu zwrócić true.

za korzystanie CustomEditText można użyć XML lub w Javie, które definiują i zainicjować, że podobnie jak inne widget (Button, TextView, ...), a inny jest tylko trzeba określić to w xml jak:

<yourPackage.CustomEditText ..... /> 
+1

ta odpowiedź wydaje się nadęta - na 'onKeyPreIme()' można lepiej wyjaśnić jako odpowiedź główną, a dodatkową klasę podać jako przykład tego, jak można ją wykorzystać. – ataulm

+0

@ataulm wyjaśniam więcej, ale nie sądzę, że potrzebujesz więcej wyjaśnień, w każdym razie dziękuję za powiadomienie mnie i twoją sugestię. Mam nadzieję, że to wystarczy, ponieważ mój angielski nie jest dobry, nie mogę wyjaśnić więcej niż to :) –

+0

@shayanpourvatan Thakz. zadziałało –

Powiązane problemy