it-swarm.com.de

Erweitern Sie und geben Sie SearchView automatisch den Fokus

Ich entwickle eine Anwendung, bei der der Benutzer auf das Symbol "Suchen" in der Variablen "ActionBar" drückt und eine Variable "SearchView" am oberen Bildschirmrand sichtbar wird. 

Mein Problem ist, dass die SearchView weder im Fokus steht noch erweitert ist, so dass der Benutzer die Suchtaste auf der Searchview drücken muss, um die Tastatur erweitern zu können. 

Wie soll das gelöst werden?

58
SweSnow

Um das SearchView standardmäßig zu erweitern, rufen Sie setIconifiedByDefault(false) auf, wenn Sie es initialisieren (beispielsweise in onCreateOptionsMenu(..) oder onPrepareOptionsMenu(..)). In den meisten Fällen habe ich festgestellt, dass dadurch automatisch der Fokus festgelegt wird. Wenn dies nicht der Fall ist, rufen Sie auch einfach requestFocus() auf. 

76
Alex Curran

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 Aktionsleistenlayout:

<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"
        />
100
JavierCane

Wenn Sie iconifiedByDefault haben wollen, hat dies für mich funktioniert. setFocusable und setIconified sind erforderlich. 

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

Update: Wenn SieAndroid.support.v7.widget.SearchViewverwenden, ist das Verhalten sehr unterschiedlich. clearFocus ist erforderlich, wenn die Tastatur nicht ständig geöffnet werden soll. Aus irgendeinem Grund wird das Menü ständig neu erstellt, wenn appcompat verwendet wird.

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

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

mSearchView.onActionViewExpanded()

24
riwnodennyk

Das hat für mich funktioniert: 

Im Grundlayout: 

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"
6
Parth mehta

Das hat für mich funktioniert:

menu.expandActionView();
4
Kai Burghardt

Wenn Sie eine Aktivität verwenden, müssen Sie diese verwenden

view.onActionViewExpanded();

wenn Sie Menüoptionen verwenden, müssen Sie diese verwenden

MenuItem.expandActionView();

Hinweis: Dies funktioniert nur für SearchView 

diese beiden Situationen werden für mich bearbeitet.

4
saibaba vali

Sie können die SearchView#setIconified()-Methode für ein SearchView-Handle in Ihrem Java-Code verwenden. Mehr hier: 

http://developer.Android.com/reference/Android/widget/SearchView.html#setIconified(boolean)

Sie können auch SearchView#setIconifiedByDefault() verwenden. Mehr Infos hier:

http://developer.Android.com/reference/Android/widget/SearchView.html#setIconifiedByDefault(boolean)

benutze das

SearchManager searchManager = (SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE);
                SearchView searchView = new SearchView(mActivity.actionBar.getThemedContext());
                searchView.setSearchableInfo(searchManager.getSearchableInfo(mActivity.getComponentName()));
                searchView.setIconifiedByDefault(false);
                searchView.setQueryHint("Search");
                menu.findItem(R.id.action_search).setActionView(searchView);
2
manish poddar

@ Pascalius 'Antwort hat bei mir funktioniert. Jedes Mal, wenn Sie die Suchansicht schließen und erneut klicken, haben Sie den Fokus verloren. Also habe ich den Code in eine setOnMenuItemClickListener eingefügt:

MenuItem item = menu.findItem(R.id.action_search);

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) item.getActionView();

item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {
        searchView.setIconifiedByDefault(true);
        searchView.setFocusable(true);
        searchView.setIconified(false);
        searchView.requestFocusFromTouch();

        return false;
    }
});
1
Cesar Rodriguez

Android:iconifiedByDefault="true"

in Ihrer XML-Datei

0
Nikhil Dinesh

Ich verwende Android.widget Searchview und standardmäßig iconify.Below-Code in XML hat mir geholfen, es zu erweitern und auf die Suchansicht zu fokussieren, wenn Sie darauf klicken:

<SearchView
                Android:id="@+id/searchView"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:iconifiedByDefault="true"
                Android:focusable="true"
                Android:focusableInTouchMode="true"
                Android:queryHint="Search"/>
0
DISHA

SearchView von MenuItemCompat verfügt über eine Eigenschaft mit dem Namen maxWidth.

final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);

verwenden Sie statt xxx natürlich die Bildschirmbreite

0
Wops

Für Appcompat Searchview können Sie diese Methode verwenden:

MenuItemCompat.expandActionView(mSearchMenuItem);
0
Javier