2015-07-16 6 views
9

Ich versuche zu vermeiden, Vollbild-Tastaturbearbeitung auf Landschaft zu haben, um auf die Vorschläge zuzugreifen.Gibt es eine Möglichkeit, Vollbild-SearchView/Keyboard im Querformat zu vermeiden?

Ich lese schon viele Threads zu erklären, dass ich EditorInfo Flaggen wie flagNoFullscreen und/oder flagNoExtractUi hinzufügen müssen.

Ich habe sie programmatisch hinzugefügt, aber nicht wirklich hilfreich.

Gibt es eine Möglichkeit, das herauszufinden?

+1

Mögliches Duplikat von http://stackoverflow.com/questions/4336762/disilbling-the-fullscreen-editing-view-for-soft-keyboard-input-in-landscape – yahya

+0

Ich verwende eine searchview programmgesteuert. Ich kann onCreateInputConnection nicht aufgerufen werden und EditorInfo Flags sind nicht hilfreich – 13KZ

Antwort

19

Es hat eine Weile gedauert, bis ich das herausgefunden habe, aber es ist eigentlich ganz einfach.

Zunächst erstellte ich eine benutzerdefinierte Klasse, die die SearchView-Klasse erweitert und eine onCreateInputConnection() überschreiben verwendet, aber ich konnte es nicht so funktionieren.

Ich habe es schließlich auf eine viel einfachere Weise funktioniert, mit nur zwei zusätzlichen Zeilen Code.

Sie müssen nur search.getImeOptions() rufen Sie die aktuelle Konfiguration zu bekommen, und dann „oder“ das Ergebnis mit EditorInfo.IME_FLAG_NO_EXTRACT_UI mit einem Aufruf an setImeOptions():

search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Wenn Sie dies nicht tun „oder“ mit den vorhandenen Optionen , dann wird die Schaltfläche "Suchen" nicht rechts unten angezeigt, sondern nur die Schaltfläche "Fertig". Hier

ist die volle onCreateOptionsMenu() Überschreibung ich verwendet, um zu testen (ich eine Suche in der XML verwendet, aber diese Lösung sollte für Sie arbeiten, auch wenn Sie nicht Ihre Suche von xml Aufpumpen):

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu_main, menu); 

    SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

    SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView(); 

    SearchableInfo si = manager.getSearchableInfo(getComponentName()); 

    //Here is where the magic happens: 
    int options = search.getImeOptions(); 
    search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI); 
    //!!!!!!!!!!! 

    search.setSearchableInfo(si); 

    search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String query) { 
      return true; 
     } 

    }); 
    return true; 
} 

hier ist die xml ich für die Suche in menu_main.xml verwendet:

<item android:id="@+id/action_search" 
     android:title="Search" 
     android:icon="@android:drawable/ic_menu_search" 
     app:showAsAction="always" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     /> 

Ergebnis ohne den Aufruf setImeOptions():

Before

Ergebnis mit dem Aufruf von setImeOptions():

enter image description here

+1

Diese Lösung funktioniert für mich. Vielen Dank @Daniel. – 13KZ

0

Eine weitere Alternative zum Code ist die Eigenschaft in der Suche xml hinzuzufügen, ist es für APIs weniger als 16 nützlich:

<SearchView 
    android:imeOptions="flagNoExtractUi" /> 
Verwandte Themen