Android Toolbar SearchView根据其他项目约束宽度

标签 android android-actionbar searchview android-toolbar

首先,请帮我改一下标题,以更好地适应问题,以便其他人找到。
这个问题已被问到here,但得到的答案并不令我满意,我将解释原因。

注意:我将 v7-AppCompat 支持库 ~v22ToolbarsetSupportActionBar(toolbar) 一起使用>

问题
如何限制扩展的 MenuItemActionView(在我的例子中为 SearchView)以填充父项,但不将其他 MenuItem 推到范围之外。

答案显而易见(不够好)

  1. 在代码中,我们可以在项目上使用 MenuItemCompat.expandActionView(item);,但是:
    A。展开时,“后退”按钮显示在 DrawerToggle 顶部。 This并没有真正解决它。
    b.按下后,SearchView 将再次折叠。

  2. known 一样,在 SearchView 上设置 iconifiedByDefault(false) 以及 app:showAsAction="ifRoom|collapseActionView"使其扩展(并带有一些 side effects ),但是:请参阅上面的“1”。

我当前的解决方案
我在第二个解决方案中使用自定义宽度因子 (~0.7),强制 SearchView 的宽度与(Toolbar 的宽度)*(因子)一样。
这有点好,但有时会失败(我猜菜单没有完全准备好),并且有可能,通常扩展 SearchView (第一个解决方案)会导致所需的宽度。

我尝试过的另一件事:
SearchView 设置为 Toolbar 的自定义布局,而不是 MenuItem。但它开始崩溃,我似乎无法扩展它。另外,我想以“正确”的方式执行此操作,而不是使用自定义布局。

如果有任何帮助,我很乐意添加更多代码。
谢谢!

最佳答案

看来,操作栏限制了您的SearchView的最大值。以下代码对我有用:

 final MenuItem item = menu.findItem(R.id.search);
 item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_ALWAYS);
 mSearchView = (SearchView) MenuItemCompat.getActionView(item);
 mSearchView.setMaxWidth(Integer.MAX_VALUE);

核心技巧是更改 SearchView 的 maxWith。

希望这对您有帮助。

关于Android Toolbar SearchView根据其他项目约束宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967077/

相关文章:

java - onOptionsItemSelected 未从 fragment 内调用

Android Studio 刷新布局无需重建项目

android - 在 Android 上为每个选项卡滑动更改操作栏标题

android - QMOBILE、TECNO、ALPS java.lang.NoClassDefFoundError : android. support.v7.internal.view.menu.MenuBuilder

android - 如何删除 Android 中的 SearchView 蓝线

android - android SearchView 的搜索类型是什么?

java - 比较列表和从 Spinner android 中删除项目的逻辑

android - 自动部署到 Android Developer Console

android - ScrollView 魔术中的ListView

java - item.getActionview() 总是给出 null