2015-05-13 22 views
7

L'immagine mostra una parte della mia app, uno AutoCompleteTextView con un adattatore collegato. Quando l'utente inserisce qualcosa in quella vista, vengono mostrati i suggerimenti di completamento automatico.Nasconde la tastiera quando si preme la freccia verso il basso

Il problema che ho è: quando i suggerimenti sono mostrate e si preme freccia giù del dispositivo, solo i suggerimenti del AutoCompleteTextView sono chiusi, la tastiera rimane aperto e necessita di una seconda tocca la freccia giù a scomparire.

Desidero i suggerimenti e la tastiera per sparire al primo tocco sulla freccia giù.

Ho provato a ignorare onBackPressed ma non viene chiamato quando si tocca la freccia giù, presumibilmente perché non è considerato "indietro".

Come posso fare questo?

EDIT: so come nascondere la tastiera a livello di programmazione, credo che il mio problema è quello di rilevare il 'freccia giù' toccare.

enter image description here

+0

Prova a questo [Chiudi/nascondere la tastiera virtuale di Android] [1] [1]: http://stackoverflow.com/a/1109108/3383038 –

+0

So come nascondere la tastiera a livello di programmazione, suppongo che il mio problema sia quello di rilevare il tocco "freccia giù". – FWeigl

+0

Forse sono stupido, ma non capisco quale tasto in basso vuoi dire? Quello dalla tastiera fisica? – Haspemulator

risposta

5

tentano di prevaricare onKeyPreIme() metodo nel AutoCompleteTextView come segue:

sguardo
@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

Funziona come un incantesimo, grazie! – FWeigl

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

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

è necessario importare android.view.inputmethod.InputMethodManager;

0

Si può provare qualcosa di simile:

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

Non ho provato il codice, ma credo che questo sia l'approccio giusto .

Problemi correlati