2015-05-13 12 views
7

Zdjęcie pokazuje część mojej aplikacji, AutoCompleteTextView z dołączonym adapterem. Gdy użytkownik wprowadza coś do tego widoku, wyświetlane są sugestie autouzupełniania.Ukrywanie klawiatury po naciśnięciu przycisku strzałki w dół

Mam problem: po wyświetleniu sugestii i naciśnięciu strzałki w dół urządzenia, tylko sugestie z AutoCompleteTextView są zamknięte, klawiatura pozostaje otwarta i potrzebuje drugiego dotknięcia strzałki w dół, aby zniknąć.

Chcę, aby sugestie i zniknęły z klawiatury po pierwszym dotknięciu strzałki w dół.

Próbowałem przesłonić , ale nie jest on wywoływany, gdy strzałka w dół jest stuknięta, prawdopodobnie dlatego, że nie jest uważana za "wstecz".

Jak mogę to zrobić?

EDYTOWANIE: Wiem, jak programowo ukryć klawiaturę, myślę, że mój problem polega na wykryciu "strzałki w dół".

enter image description here

+0

Spróbuj spojrzeć na to [Close/ukryć Android klawiatura] [1] [1]: http://stackoverflow.com/a/1109108/3383038 –

+0

Wiem, jak programowo ukryć klawiaturę, myślę, że mój problem polega na wykryciu "strzałki w dół". – FWeigl

+0

Może jestem głupi, ale nie rozumiem, który klucz w dół masz na myśli? Ten z fizycznej klawiatury? – Haspemulator

Odpowiedz

5

Spróbuj zastąpić onKeyPreIme() metodę w swojej AutoCompleteTextView następująco:

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == 1) { 
     super.onKeyPreIme(keyCode, event); 
     hideKeyboard() 
     return true; 
    } 
    return super.onKeyPreIme(keyCode, event); 
} 
+0

Działa jak czar, dzięki! – FWeigl

-2
InputMethodManager inputManager = (InputMethodManager) 
            getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
            InputMethodManager.HIDE_NOT_ALWAYS); 

trzeba importować android.view.inputmethod.InputMethodManager;

0

Można spróbować czegoś takiego:

private boolean mIsKeyboardShown; 
private EditText mSearchTextView; 

@Override 
protected void onCreate(Bundle bundle) 
    ... 
    mSearchTextView = (EditText) findViewById(R.id.search); 
    View activityRootView = findViewById(R.id.activityRoot); 
    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); 
      // if more than 100 pixels, its probably a keyboard... 
      mIsKeyboardShown = (heightDiff > 100); 
     } 
    }); 
} 

public void onBackPressed() { 
    if(mIsKeyboardShown) { 
    // close the keyboard 
    InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.hideSoftInputFromWindow(mSearchTextView.getWindowToken(), 0); 
    } else { 
    super.onBackPressed(); 
    } 
} 

nie próbowałem kodu, ale myślę, że to jest właściwe podejście .

Powiązane problemy