web-gelistirme-sc.com

Genişlet ve otomatik olarak SearchView'a odak ver

Kullanıcının ActionBar içindeki "Arama" simgesine bastığı ve ekranın tepesinde SearchView öğesinin göründüğü bir uygulama geliştiriyorum. 

Benim sorunum, SearchView öğesinin odaklanmadığı veya genişlemediği için kullanıcının Searchview üzerindeki arama düğmesine basması ve klavyeyi çıkarması gerekiyor. 

Bu nasıl çözülmeli?

58
SweSnow

Arama Görünümünü varsayılan olarak genişletmek için, başlattığınızda üzerinde bulunan setIconifiedByDefault(false) işlevini çağırın (örn. onCreateOptionsMenu(..) veya onPrepareOptionsMenu(..) içinde). Çoğu durumda bunun otomatik olarak odaklanacağını öğrendim, ancak bunun yerine requestFocus() işlevini de çağırmayın. 

76
Alex Curran

Ayrıca zorlamak için genişletmeActionView () yöntemini çağırabilirsiniz:

@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;
}

Eylem Çubuğu düzeninde arama öğesi:

<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

iconifiedByDefault olmasını istiyorsanız, bu benim için çalıştı. setFocusable ve setIconified gereklidir. 

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

Güncelleme:Android.support.v7.widget.SearchView/ kullanıyorsanız davranış bizi çok farklı. Klavyenin her zaman açılmasını istemiyorsanız clearFocus gereklidir. Nedense appcompat kullanılırken menü her zaman yeniden oluşturulur.

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

Düzende kullanıyorsanız, arayabilirsiniz.

mSearchView.onActionViewExpanded()

22
riwnodennyk

Bu benim için çalıştı: 

Kök düzeninde: 

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

SearchView aşağıdaki gibi tanımlanır:

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

Fark app etiketi ile. 

app:iconifiedByDefault="false"
app:queryHint="Search name or email"
6
Parth mehta

Bu benim için çalıştı:

menu.expandActionView();
4
Kai Burghardt

Bir etkinlik içinde kullanıyorsanız kullanmanız gerekir.

view.onActionViewExpanded();

menü seçenekleri içinde kullanıyorsanız kullanmanız gerekir.

MenuItem.expandActionView();

Not: Sadece SearchView için çalışır 

bu iki durum benim için çalıştı.

4
saibaba vali

SearchView#setIconified() yöntemini Java kodunuzdaki SearchView tutamacında kullanabilirsiniz. Daha fazla burada: 

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

SearchView#setIconifiedByDefault() işlevinden de yararlanabilirsiniz. Daha fazla bilgi burada:

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

bunu kullan

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'un cevabı benim için çalıştı. Ancak SearchView'ı her kapatıp yeniden tıkladığınızda Odağı kaybettiniz. Bu yüzden kodu şöyle bir setOnMenuItemClickListener içine ekledim:

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"

xml dosyanızda

0
Nikhil Dinesh

Ben Android.widget Searchview kullanıyorum ve varsayılan olarak ikonize ediyorum.

<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

MenuItemCompat's SearchView maxWidth adlı bir özelliğe sahiptir.

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

xxx offcourse yerine ekran genişliğini kullanın

0
Wops

Appcompat Searchview için bu yöntemi kullanabilirsiniz:

MenuItemCompat.expandActionView(mSearchMenuItem);
0
Javier