android - SearchView 占用了新 ActionBarCompat 中的所有空间

标签 android actionbarsherlock android-actionbar android-actionbar-compat

我从 ActionBarSherlock 切换到 ActionBarCompat(支持库 v7)。经过一些调整,现在几乎一切正常。

但我在 ActionBar 中的 SearchView 遇到了麻烦。当它展开时(实际上,它总是在我的 Activity 中展开),它占用了所有空间,并且不尊重其他设置为始终显示 (showAsAction="always") 的操作项的空间。

要模拟问题,请使用:

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

    <item
        android:id="@+id/menu_buscar"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/abc_ic_search"
        app:showAsAction="always"
        android:title="@string/buscar"/>

    <item android:id="@+id/tentar_novamente"
          android:title="@string/tentar_novamente"
          android:icon="@drawable/acao_tentar_novamente"
          app:showAsAction="always" />

</menu>

在 Activity 中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.busca_action_menu, menu);

    searchMenuItem = menu.findItem(R.id.menu_buscar);
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);

    searchView.setIconifiedByDefault(false);
    searchView.setQueryHint(stringBusqueArtistasMusicasEAlbuns);

    return super.onCreateOptionsMenu(menu);
}

这是 android 4.3 中的结果:

enter image description here

这是 android 2.3 中的结果(甚至没有出现操作项):

enter image description here

我使用时也会出现同样的问题:

setSupportProgressBarIndeterminateVisibility(true);

进度指示器在Android 4.3中显得很奇怪,在Android 2.3中没有出现。

相同的代码在 ActionBarSherlock 中按预期工作。当有一些操作项时,SearchView 会减小其宽度以为操作项留出空间。

更新:

我在 Android 的 Bug Tracker 中发布了一个问题: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

如果你有同样的问题,请关注issue。

更新:

我尝试将操作项放在 SearchView 之前,这样它们就会出现。

enter image description here

但是,setSupportProgressBarIndeterminateVisibility(true) 仍然没有显示进度条。

最佳答案

这绝对是一个关于 Android 的错误,但解决方法可以像这样以编程方式包含 SearchView:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
    searchView.setIconifiedByDefault(false);
    getActionBar().setCustomView(searchView);
    getActionBar().setDisplayShowCustomEnabled(true);
}

您还可以使用布局 XML 来定义 SearchView 属性。 然而,根据我的经验,XML 中的“iconifiedByDefault”往往无效。 (虽然这可能是我的坏事)

感谢您为此提出问题。 以下是相关错误报告的 URL: https://code.google.com/p/android/issues/detail?id=58251

尽管在错误报告中提到了什么,但我对 ActionBarSherlock 和 ActionBarCompat 的体验是一样的。所以我预计 ActionBarSherlock 用户也会受到影响。

关于android - SearchView 占用了新 ActionBarCompat 中的所有空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898282/

相关文章:

android - FLAG_ACTIVITY_REORDER_TO_FRONT 和 startActivityForResult

java - Android中使用聚类算法时如何取marker Tag

android - 如何在滑动菜单中使用 Android Google Map V2 作为 fragment ?

android - 操作栏图标和标题之间的间距。

Android Studio 简单单元测试不起作用

android - 如何在附加后取消附加 webview?

Android - 3 次滑动后 Sherlock 内容消失

android - 在保持状态的同时切换 fragment

android:actionBarStyle 需要 API 级别 11

android - 如何在操作栏下拉导航中设置 Activity 项?