如何使SearchView以标准方式运行?

Ali*_*aka 1 android android-actionbar searchview

将SearchView添加到菜单时(请参见下面的示例),它的图标不会更改,并且它以非标准方式运行.例如,长按搜索菜单按钮应该弹出文本搜索,但它不会.

如何将其行为更改为更标准?(图标和长按现在.我确定还有其他问题)

用于添加视图的代码示例:

MenuItem item = menu.add("Search");
SearchView sv = new SearchView(getActivity());
item.setActionView(sv);
item.setIcon(drawable.menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
Run Code Online (Sandbox Code Playgroud)

谢谢.

Mat*_*ers 6

更新:可以从代码中获得.您必须添加MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW和更改的情况下SearchViewgetActionBar().getThemedContext().

MenuItem item = menu.add("Search");
SearchView sv = new SearchView(getActionBar().getThemedContext());
item.setActionView(sv);
item.setIcon(R.drawable.ic_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
        | MenuItem.SHOW_AS_ACTION_IF_ROOM);
Run Code Online (Sandbox Code Playgroud)

您正尝试SearchView从代码创建操作项,而不是建议的方法.定义包含搜索项的菜单资源,如下所示:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_search"
        android:showAsAction="collapseActionView|ifRoom"
        android:title="@string/search_title"/>

</menu>
Run Code Online (Sandbox Code Playgroud)

给它充气onCreateOptionsMenu:

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这将解决问题.有关更多信息,请参阅Android文档中的将搜索视图添加到操作栏.