Как открыть программу SearchView программно?
Вот этот виджет для ActionBar, который называется "SearchView".
Когда он не используется, он выглядит так:
![enter image description here]()
И когда он используется, он выглядит так:
![enter image description here]()
Я хочу (программно, конечно) открыть searchview (сделать его "в использовании" ).
Я пробовал несколько функций, таких как:
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(this);
searchView.performClick();
searchView.requestFocus();
Но никто из тех не работал...
SearchView в XML:
<item android:id="@+id/menu_search"
android:title="Search"
android:icon="@drawable/ic_action_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
Ответы
Ответ 1
Разверните SearchView
с помощью
searchView.setIconified(false);
и свернуть его с помощью
searchView.setIconified(true);
Вам нужно изменить значение android:showAsAction
с ifRoom|collapseActionView
на always
. Атрибут SearchView
android:iconifiedByDefault
должен быть true
, который является значением по умолчанию, иначе пользователь не может свернуть SearchView
после его программного программирования.
Ответ 2
Попробуйте вызвать expandActionView()
в MenuItem, а не onActionViewExpanded() в ActionView.
Это работает для меня.
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();
Ответ 3
Если вы хотите использовать библиотеку поддержки только при необходимости, сделайте это
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
if (Utils.hasIceCreamSandwich())
searchMenuItem.expandActionView();
else MenuItemCompat.expandActionView(searchMenuItem);
else просто выполните это
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
MenuItemCompat.expandActionView(searchMenuItem);
Ответ 4
Я знаю, что это поздно, но
Попробуйте вызвать expandActionView(), чтобы открыть его и свернутьActionView(), чтобы закрыть его. Вы можете вызвать requestFocus() в действительном представлении действий через getActionView(), чтобы настроить фокус поиска:)