SearchView
の中にActionBar
があり、検索アイコンが押されたときにActionBar
全体を使用したいのですが、使用できるのはActionBar
のみですフリースペース
私のメニューコード:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
tools:context="br.com.moderna.houaiss.activity.SearchActivity" >
<item
Android:id="@+id/search"
Android:actionViewClass="Android.widget.SearchView"
Android:icon="@drawable/ic_search_white_48dp"
Android:showAsAction="collapseActionView|always"
Android:title="@string/search"/>
<item
Android:id="@+id/backWardHistory"
Android:icon="@drawable/ic_arrow_back_white_48dp"
Android:showAsAction="always"
Android:title="@string/back_history"/>
<item
Android:id="@+id/forWardHistory"
Android:icon="@drawable/ic_arrow_forward_white_48dp"
Android:showAsAction="always"
Android:title="@string/forward_history"/>
<item
Android:id="@+id/action_home"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:title="@string/action_home"/>
<item
Android:id="@+id/action_about"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:title="@string/action_about"/>
<item
Android:id="@+id/action_configuration"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:title="@string/action_configuration"/>
<item
Android:id="@+id/action_logout"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:title="@string/action_logout"/>
試してみましたAndroid:showAsAction="ifRoom"
が、メニュー内ではなく、常にActionBar
上にある必要があります。
編集------
@Simasのおかげで、
この効果を達成するためにsetOnActionExpandListenerメソッドを使用しました
final MenuItem searchItem = menu.findItem(R.id.search);
searchItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(final MenuItem item) {
SearchActivity.this.setItemsVisibility(menu, searchItem, false);
return true;
}
@Override
public boolean onMenuItemActionCollapse(final MenuItem item) {
SearchActivity.this.setItemsVisibility(menu, searchItem, true);
return true;
}
});
private void setItemsVisibility(final Menu menu, final MenuItem exception,
final boolean visible) {
for (int i = 0; i < menu.size(); ++i) {
MenuItem item = menu.getItem(i);
if (item != exception)
item.setVisible(visible);
}
}
SearchView
が展開されているときに他のすべてのアイテムを非表示にすることで、自分自身を模倣できます。
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
final MenuItem searchItem = menu.findItem(R.id.search);
SearchView searchView = (Android.widget.SearchView) searchItem.getActionView();
// Detect SearchView icon clicks
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setItemsVisibility(menu, searchItem, false);
}
});
// Detect SearchView close
searchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
setItemsVisibility(menu, searchItem, true);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
private void setItemsVisibility(Menu menu, MenuItem exception, boolean visible) {
for (int i=0; i<menu.size(); ++i) {
MenuItem item = menu.getItem(i);
if (item != exception) item.setVisible(visible);
}
}
これは遅い回答になりますが、この属性をメニュー項目に追加すると、作業が完了します。
app:showAsAction="collapseActionView|always"
ここでのキーワードはcollapseActionViewです。
このコード行を使用して、searchviewで使用可能な全幅を拡大しました。これは、アクションバーに他のアイテムが表示されている場合に機能します。
searchView.setMaxWidth(Android.R.attr.width);