我从 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 中的结果:
这是 android 2.3 中的结果(甚至没有出现操作项):
我使用时也会出现同样的问题:
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 之前,这样它们就会出现。
但是,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/