79

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

私の問題は、SearchViewがフォーカスされておらず、拡張されていないため、ユーザーがの検索ボタンを押しSearchviewて拡張し、キーボードを引き出す必要があることです。

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

4

18 に答える 18

113

強制的に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"
        />
于 2013-03-30T17:34:44.507 に答える
103

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

于 2012-07-29T14:41:43.140 に答える
60

あなたがそれを持ちたいのなら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();
于 2015-04-26T09:48:02.870 に答える
26

レイアウトで使用している場合は、

mSearchView.onActionViewExpanded()

于 2013-12-02T18:31:09.053 に答える
8

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

ルートレイアウト:

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"
于 2015-02-08T08:33:03.280 に答える
6

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

view.onActionViewExpanded();

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

MenuItem.expandActionView();

注:SearchViewでのみ機能します

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

于 2016-05-18T09:42:32.667 に答える
4

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

menu.expandActionView();
于 2013-08-08T13:54:49.580 に答える
2

SearchView#setIconified()このメソッドは、JavaコードのSearchViewハンドルで使用できます。詳細はこちら:

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

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

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

于 2015-05-27T13:59:32.617 に答える
2

これを使って

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);
于 2017-07-12T12:09:44.990 に答える
2

@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;
    }
});
于 2017-09-10T02:26:58.230 に答える
2

Appcompat Searchviewの場合、次の方法を使用できます。

MenuItemCompat.expandActionView(mSearchMenuItem);
于 2017-09-19T13:31:22.823 に答える
2

Kotlin

var searchView = menu.findItem(R.id.action_search).actionView as SearchView
searchView.isIconified = true
于 2021-05-26T07:49:08.560 に答える
1

expandActionView()menuItemを呼び出します。

menuItem.expandActionView()
于 2020-05-21T02:45:17.443 に答える
1

でこれを行うのに苦労していましSearchView widgetたが、expandActionView() method実際にはSearchViewクラスではなくMenuItemクラスで定義されています。だから、私はそれを解決しました

        MenuItem searchItem = menu.findItem(R.id.item_search);
        SearchView   searchView = (SearchView) searchItem.getActionView();
        searchItem.expandActionView();//the method expandActionView is called on searchItem not searchView
于 2020-11-07T15:50:47.700 に答える
0

MenuItemCompatのSearchViewには、maxWidthという名前のプロパティがあります。

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

xxxオフコースの代わりに画面幅を使用する

于 2015-07-30T11:28:14.033 に答える
0

私はandroid.widgetSearchviewを使用しており、デフォルトでアイコン化されています。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"/>
于 2017-08-24T18:27:20.903 に答える
0

 <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always"/>

 public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);
        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setQueryHint("Search the customer...");
        searchView.setSearchableInfo(Objects.requireNonNull(searchManager).getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);
        searchView.setIconifiedByDefault(false);
        searchView.requestFocus();

    }

<pre>

 <item
        android:id="@+id/search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always"/>

 public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);
        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setQueryHint("Search the customer...");
        searchView.setSearchableInfo(Objects.requireNonNull(searchManager).getSearchableInfo(getComponentName()));
        searchView.setMaxWidth(Integer.MAX_VALUE);
        searchView.setIconifiedByDefault(false);
        searchView.requestFocus();

    }

</pre>

于 2020-03-04T06:50:16.547 に答える
-2

android:iconifiedByDefault="true"

上記のXMLのコードは、クリックしたときに展開して検索ビューにオートフォーカスするのに役立ちました。

于 2017-01-27T13:32:09.600 に答える