展开搜索视图以使用整个操作栏(隐藏其他内容)
Expand Search View to use entire Action Bar (hide other things)
我的 ActionBar
里面有一个 SearchView
,我想在按下搜索图标时使用整个 ActionBar
,但我只能使用 ActionBar
免费space
我的菜单代码:
<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.setMaxWidth(android.R.attr.width);
“collapseActionView”属性适用于 menu.xml 中的菜单项以隐藏其他内容并添加返回操作按钮-
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView" />
在少数情况下,如果它不起作用,我们可以使用 MenuItem.OnActionExpandListener 显式 hide/show 其他菜单项,如下所示-
action_search.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
action_setting.setVisible(false); // to hide item
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
action_setting.setVisible(true); // to show item
return true;
}
});
我的 ActionBar
里面有一个 SearchView
,我想在按下搜索图标时使用整个 ActionBar
,但我只能使用 ActionBar
免费space
我的菜单代码:
<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.setMaxWidth(android.R.attr.width);
“collapseActionView”属性适用于 menu.xml 中的菜单项以隐藏其他内容并添加返回操作按钮-
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView" />
在少数情况下,如果它不起作用,我们可以使用 MenuItem.OnActionExpandListener 显式 hide/show 其他菜单项,如下所示-
action_search.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
action_setting.setVisible(false); // to hide item
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
action_setting.setVisible(true); // to show item
return true;
}
});