2015-05-13 22 views
7

Das Bild zeigt einen Teil meiner App, eine AutoCompleteTextView mit einem angeschlossenen Adapter. Wenn der Benutzer etwas in diese Ansicht eingibt, werden Vorschläge zur automatischen Vervollständigung angezeigt.Tastatur ausblenden, wenn Pfeil nach unten gedrückt wird

Das Problem, das ich habe, ist: wenn die Vorschläge angezeigt werden und der Geräteabwärtspfeil gedrückt wird, bleiben nur die Vorschläge von AutoCompleteTextView geschlossen, die Tastatur bleibt offen und braucht einen zweiten Tipp auf den Abwärtspfeil, um zu verschwinden.

Ich möchte, dass die Vorschläge und die Tastatur beim ersten Tippen auf den Pfeil nach unten verschwinden.

Ich habe versucht, onBackPressed überschreiben, aber es wird nicht aufgerufen, wenn der Abwärtspfeil angezapft wird, vermutlich weil es nicht als "zurück" betrachtet wird.

Wie könnte ich das tun?

BEARBEITEN: Ich weiß, wie die Tastatur programmatisch zu verbergen, ich denke, mein Problem ist es, den "nach unten" tippen Sie auf tippen.

enter image description here

+0

Try-Look [Schließen/verstecken die Android Soft Keyboard] [1] [1]: http://stackoverflow.com/a/1109108/3383038 –

+0

Ich weiß, wie man die Tastatur programmatisch versteckt, ich vermute, dass mein Problem ist, den "Pfeil nach unten" tippen zu finden. – FWeigl

+0

Vielleicht bin ich dumm, aber ich verstehe nicht, welchen Abwärtsschlüssel meinst du? Der von der physischen Tastatur? – Haspemulator

Antwort

5

Try onKeyPreIme() Methode in Ihrer AutoCompleteTextView außer Kraft zu setzen, wie folgt: bei dieser

@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

Funktioniert wie ein Charme, danke! – FWeigl

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

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

benötigen Sie android.view.inputmethod.InputMethodManager;

0

Sie so etwas wie dies versuchen zu importieren:

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

Ich habe den Code nicht versucht, aber ich denke, das ist der richtige Ansatz .

Verwandte Themen