Erweitern Sie und geben Sie SearchView automatisch den Fokus

Lesezeit: 3 Minuten

Benutzer-Avatar
SweSchnee

Ich entwickle eine Anwendung, bei der der Benutzer auf das Symbol “Suchen” in der ActionBar und ein SearchView wird am oberen Bildschirmrand sichtbar gemacht.

Mein Problem ist, dass die SearchView ist weder im Fokus noch erweitert, sodass der Benutzer die Suchschaltfläche auf drücken muss Searchview um es zu erweitern und die Tastatur herauszubringen.

Wie soll das gelöst werden?

Sie können auch die Methode expandActionView() aufrufen, um sie zu erzwingen:

@Override
public boolean onCreateOptionsMenu( Menu menu )
{
    super.onCreateOptionsMenu( menu );

    MenuItem searchMenuItem = menu.findItem( R.id.mi_search ); // get my MenuItem with placeholder submenu
    searchMenuItem.expandActionView(); // Expand the search menu item in order to show by default the query

    return true;
}

Suchelement im Aktionsleisten-Layout:

<item
        android:id="@+id/mi_search"
        android:icon="@drawable/abs__ic_search_api_holo_light"
        android:title="@string/search"
        android:showAsAction="ifRoom|collapseActionView"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        />

  • Wenn du benutzt AppCompatanstatt anzurufen expandActionView() direkt an der searchMenuItemsollten Sie stattdessen Folgendes verwenden: MenuItemCompat.expandActionView(searchMenuItem).

    – Karl Madere

    10. April 2014 um 23:57 Uhr

  • Der @CharlesMadere-Weg ist der einzige, der für mich funktioniert hat, API 23

    – Matteo

    27. Mai 2016 um 22:10 Uhr

  • plus 1 für searchMenuItem.expandActionView();

    – Vlad

    13. November 2017 um 10:10 Uhr

  • MenuItemCompat.expandActionView(searchMenuItem) ist jetzt veraltet

    – Glücksritter

    25. April 2018 um 9:39 Uhr

  • Diese Lösung ist veraltet.

    – Begünstige Felix Chinemerem

    21. Mai 2020 um 2:43 Uhr

Benutzer-Avatar
Alex Curran

Rufen Sie auf, um die SearchView standardmäßig erweitert zu machen setIconifiedByDefault(false) darauf, wenn Sie es initialisieren (zB in onCreateOptionsMenu(..) oder onPrepareOptionsMenu(..)). Ich habe festgestellt, dass dies in den meisten Fällen automatisch den Fokus gibt, aber wenn nicht, rufen Sie einfach an requestFocus() auch drauf.

  • Ich bin mir nicht sicher, um ehrlich zu sein, sorry.

    – Alex Curran

    29. Juli 2012 um 18:48 Uhr

  • Hinzufügen eines requestFocus() anrufen onPrepareOptionsMenu(..) hat es mir angetan.

    – Der schmutzige Calvinist

    18. April 2013 um 18:06 Uhr

  • requestFocus funktioniert bei mir nicht. Zu “fokussieren” können Sie anrufen setIconified mit false

    – Peter Chaula

    22. November 2016 um 6:36 Uhr

  • @SweSnow Sie müssen beide festlegen …searchView.setIconifiedByDefault(false); searchView.requestFocus();

    – Pallavbohara

    9. November 2017 um 11:16 Uhr

  • Stellen Sie sicher, dass Sie die Menüeintragseigenschaft festgelegt haben app:showAsAction="always". Als ich den Autofokus entfernte, verschwand das Symbol und das 3-Punkte-Symbol erschien

    – Riccardo

    22. Mai 2019 um 14:15 Uhr

Benutzer-Avatar
Pascalius

Wenn du es haben willst iconifiedByDefaultdas hat bei mir funktioniert. setFocusable und setIconified wird gebraucht.

    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setIconifiedByDefault(true);
    searchView.setFocusable(true);
    searchView.setIconified(false);
    searchView.requestFocusFromTouch();

Update: Wenn Sie verwenden android.support.v7.widget.SearchView das Verhalten uns sehr unterschiedlich. clearFocus wird benötigt, wenn Sie nicht möchten, dass die Tastatur ständig angezeigt wird. Aus irgendeinem Grund wird das Menü bei der Verwendung von appcompat ständig neu erstellt.

SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconified(false);
searchView.clearFocus();

Wenn Sie es im Layout verwenden, können Sie anrufen

mSearchView.onActionViewExpanded()

Das hat bei mir funktioniert:

Im Root-Layout:

xmlns:app="http://schemas.android.com/apk/res-auto"

SearchView wie folgt definiert:

 <android.support.v7.widget.SearchView
        android:id="@+id/search_contacts"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_margin="15dp"
        android:background="@drawable/search_view"        
        app:iconifiedByDefault="false"
        app:queryHint="Search name or email"
        >

        <requestFocus />
    </android.support.v7.widget.SearchView>

Der Unterschied besteht im App-Tag.

app:iconifiedByDefault="false"
app:queryHint="Search name or email"

Wenn Sie innerhalb einer Aktivität verwenden, müssen Sie verwenden

view.onActionViewExpanded();

Wenn Sie innerhalb der Menüoptionen verwenden, müssen Sie verwenden

MenuItem.expandActionView();

Hinweis: Es funktioniert nur für SearchView

Diese beiden Situationen sind für mich gearbeitet.

Benutzer-Avatar
Kai Burghardt

Das hat bei mir funktioniert:

menu.expandActionView();

  • Das Schließen-Symbol ist jedoch zunächst nicht in erweiterter Form sichtbar. stackoverflow.com/questions/27706192/…

    – Schatten

    30. Dezember 2014 um 13:53 Uhr

1277600cookie-checkErweitern Sie und geben Sie SearchView automatisch den Fokus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy