安卓SearchView小部件:setIconified[默认或非默认](false)无效

3

我已经设置了一个工具栏,并在其中添加了一个搜索视图小部件。这个工具栏菜单的XML如下:

<item android:id="@+id/searchView"
    android:title="@string/search_title"
    android:icon="@drawable/ic_baseline_search_24px"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="collapseActionView|ifRoom" />

在拥有这个Toolbar的片段中,我已经重写了它的onCreateOptionsMenu方法来显示Toolbar并配置SearchView

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menu_inflater) {
    menu_inflater.inflate(R.menu.action_bar_menu, menu);
    super.onCreateOptionsMenu(menu,menu_inflater);

    AppCompatActivity app_compat_activity = (AppCompatActivity) getActivity();
    SearchView search_view = (SearchView) menu.findItem(R.id.searchView).getActionView();
    search_view.setIconified(false);
    search_view.setIconifiedByDefault(false);
    search_view.clearFocus();
    SearchManager search_manager = (SearchManager) Objects.requireNonNull(app_compat_activity).getSystemService(Context.SEARCH_SERVICE);
    search_view.setSearchableInfo(Objects.requireNonNull(search_manager).getSearchableInfo(app_compat_activity.getComponentName()));
}

我的目标是让SearchView扩展(填充整个Toolbar的宽度)。上面的代码不起作用。


1
请删除此代码:search_view.clearFocus(); 然后再试一下。 - Zaid Mirza
@ZaidMirza 谢谢您的回答。然而,它没有解决我的问题:我仍然需要点击图标才能展开小部件。 - JarsOfJam-Scheduler
1个回答

6
改变
app:showAsAction="collapseActionView|ifRoom" 

为了

app:showAsAction="always"

删除 search_view.clearFocus();


它能工作,但为什么?我以为 collapseActionView|ifRoom 应该是在没有足够空间时将 ActionView 放置在 ActionBar 的溢出菜单中。 - JarsOfJam-Scheduler
1
如果有足够的空间展示,您正在告诉系统 CollapseActionView 并在工具栏上显示它,但您的要求是将其扩展并始终显示。 - Zaid Mirza
我的工具栏中有另一个操作视图(汉堡菜单,位于扩展搜索栏的左侧)。如果我写入app:showAsAction="always"(或app: showAsAction="ifRoom"),则搜索视图会展开,但会隐藏汉堡菜单。您是否知道是否存在一些方法可以显示尽可能宽的搜索视图,同时考虑到工具栏上的其他操作视图(在本例中为汉堡菜单)?更准确地说,我想要与Google Play商店相同的工具栏(https://fscl01.fonpit.de/userfiles/7529367/image/playstore-w782.jpg)。 - JarsOfJam-Scheduler
在这种情况下,不要使用菜单,而是制作一个定制的工具栏。 - Zaid Mirza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接