我从ActionBarSherlock切换到ActionBarCompat(支持库v7)。经过一些调整后,现在几乎所有东西都运转良好。
但是我在ActionBar中遇到了SearchView问题。当它被扩展时(实际上,它总是在我的Activity中扩展),它占用了所有空间并且不尊重设置为始终显示的其他Action Items的空间(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>
在活动中:
@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
如果您遇到同样的问题,请关注此问题。
更新:
我试图将操作项放在SearchView之前,这样就会出现这些项目。
但是,setSupportProgressBarIndeterminateVisibility(true)仍未显示进度条。
答案 0 :(得分:5)
这绝对是一个关于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用户也受到影响。
答案 1 :(得分:1)
您是否尝试过使用collapseActionView()
?
我这样用:
public static MenuItem msearchMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
msearchMenuItem = menu.findItem(R.id.search);
return true;
}
public static MenuItem getSearchMenuItem() {
return msearchMenuItem;
}
public void doSomething(){
//Collapse the SearchBar
getSearchMenuItem().collapseActionView();
}
我不知道它是否适用于v7,但它肯定适用于v4。
尝试更改android:showAsAction =“collapseActionView | ifRoom”
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/search"
android:title="@string/search_title"
android:icon="@drawable/ic_search"
android:showAsAction="collapseActionView|ifRoom"
android:actionViewClass="android.widget.SearchView" />
</menu>
答案 2 :(得分:0)
删除行
searchView.setIconifiedByDefault(false);
或者您可以使用true
作为参数显式调用该方法。