web-dev-qa-db-ja.com

SearchViewを自動的に展開してフォーカスを与える

ユーザーがActionBarの[検索]アイコンを押すと、画面の上部にSearchViewが表示されるアプリケーションを開発しています。

私の問題は、SearchViewがフォーカスも展開もされていないため、ユーザーがSearchviewの検索ボタンを押して展開し、キーボードを表示する必要があることです。

これはどのように解決する必要がありますか?

68
SweSnow

SearchViewをデフォルトで展開するには、初期化するときにsetIconifiedByDefault(false)を呼び出します(例:onCreateOptionsMenu(..)またはonPrepareOptionsMenu(..))。ほとんどの場合、これにより自動的にフォーカスが得られることがわかりましたが、そうでない場合は単にrequestFocus()を呼び出します。

83
Alex Curran

ExpandActionView()メソッドを呼び出して強制することもできます。

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

アクションバーレイアウトでアイテムを検索:

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

あなたがそれをiconifiedByDefaultにしたい場合、これは私のために働いた。 setFocusablesetIconifiedが必要です。

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

更新:Android.support.v7.widget.SearchViewを使用している場合、動作は非常に異なります。キーボードのポップアップを常に表示したくない場合は、clearFocusが必要です。何らかの理由で、appcompatを使用すると、メニューが常に再作成されます。

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

レイアウトで使用している場合、呼び出すことができます

mSearchView.onActionViewExpanded()

24
riwnodennyk

これは私のために働いた:

ルートレイアウト:

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

SearchViewは次のように定義されています。

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

違いはアプリタグです。

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

アクティビティ内で使用している場合は、使用する必要があります

view.onActionViewExpanded();

メニューオプション内で使用している場合は、使用する必要があります

MenuItem.expandActionView();

注:SearchViewでのみ機能します

これらの2つの状況は私のために働いています。

5
saibaba vali

これは私のために働いた:

menu.expandActionView();
4
Kai Burghardt

Javaコード内のSearchViewハンドルでSearchView#setIconified()メソッドを使用できます。詳細:

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

SearchView#setIconifiedByDefault()を使用することもできます。詳細はこちら:

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

これを使って

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の答えは私のために働いた。ただし、SearchViewを閉じてもう一度クリックするたびに、フォーカスが失われます。そこで、次のようにsetOnMenuItemClickListenerにコードを挿入しました。

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ファイルで

0
Nikhil Dinesh

私はAndroid.widget Searchviewを使用しており、デフォルトでアイコン化されています。xmlのコードの下で、クリックすると検索ビューで展開してオートフォーカスするのに役立ちました:

<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のSearchViewには、maxWidthという名前のプロパティがあります。

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

xxx offcourseの代わりに画面幅を使用する

0
Wops

Appcompat Searchviewの場合、このメソッドを使用できます。

MenuItemCompat.expandActionView(mSearchMenuItem);
0
Javier