如何以编程方式打开SearchView?

Eli*_*vah 98 java android android-actionbar

ActionBar有一个名为"SearchView"的小部件.当它不使用时,它看起来像这样:

在此输入图像描述

当它在使用时,它看起来像这样:

在此输入图像描述

我想(当然是以编程方式)打开searchview(使其"正在使用").

我尝试了几个功能,例如:

SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(this);

    searchView.performClick();
    searchView.requestFocus();
Run Code Online (Sandbox Code Playgroud)

但这些都没有奏效......

XML中的SearchView:

<item android:id="@+id/menu_search"
      android:title="Search"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="ifRoom|collapseActionView"
      android:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)

Mat*_*ers 242

展开SearchView使用

searchView.setIconified(false);
Run Code Online (Sandbox Code Playgroud)

用它来折叠它

searchView.setIconified(true);
Run Code Online (Sandbox Code Playgroud)

您需要将android:showAsActionfrom 的值更改ifRoom|collapseActionViewalways.该SearchView的属性android:iconifiedByDefault应该是true,这是默认值,否则用户无法折叠SearchView它编程扩大后.

  • 您好,键盘弹出但SearchView无法打开. (15认同)
  • android:showAsAction ="总是",对我来说很重要. (12认同)
  • 男人你是我的英雄王 (7认同)
  • MenuItemCompat.expandActionView(菜单项); 作品 (6认同)
  • showAsAction="always" 在旋转后会显示一个丑陋的全屏搜索栏 (2认同)
  • `showAsAction="always"` 使搜索图标在展开时保留在操作栏上,这与手动聚焦搜索时的外观不同。 (2认同)

qba*_*ait 69

尝试调用expandActionView()MenuItem,而不是ActionView上的onActionViewExpanded().

这个对我有用.

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();
Run Code Online (Sandbox Code Playgroud)

  • 工作完美,但仅适用于API> 14.对于早期的API,您可以使用:MenuItemCompat.expandActionView(searchMenuItem); (10认同)
  • 当您具有可折叠的操作视图时,此方法有效. (3认同)

Ola*_*nka 13

如果您只在必要时使用支持库,请执行此操作

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    if (Utils.hasIceCreamSandwich())
        searchMenuItem.expandActionView();
    else MenuItemCompat.expandActionView(searchMenuItem);
Run Code Online (Sandbox Code Playgroud)

否则只是这样做

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    MenuItemCompat.expandActionView(searchMenuItem);
Run Code Online (Sandbox Code Playgroud)


Jam*_*ell 6

我知道这已经很晚了

尝试调用expandActionView()打开它,使用collapseActionView()来关闭它.您可以通过getActionView()在实际的Action View上调用requestFocus()来给搜索视图焦点:)


Azi*_*ziz 6

为了androidx.appcompat.widget.SearchView

searchView.setIconifiedByDefault(true)   // didn't work

searchMenuItem.expandActionView()  // didn't work

MenuItemCompat.expandActionView(searchMenuItem) // didn't work

searchView.onActionViewExpanded()  // didn't work
Run Code Online (Sandbox Code Playgroud)

以下内容对我有用,

searchView.findViewById<View>(R.id.search_button).performClick()
Run Code Online (Sandbox Code Playgroud)