【发布时间】:2014-04-16 23:30:03
【问题描述】:
我正在尝试在 ChromeCast 应用程序的上下文中使用 ActionBar 设置搜索界面(使用来自 CastCompanionLibrary 和 VideoBrowserActivity git 项目的代码)。我需要一种方法来隐藏 ChromeCast MediaRoute MenuItem(简称 ChromeCast 按钮)。它并列在一个搜索图标旁边,当用户点击搜索图标时,ChromeCast 按钮应该消失,以便让搜索视图展开(尽可能多的 ActionBar)。
首先,定义我的 ActionBar 的 XML 如下所示。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
...
<item android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
app:showAsAction="always"/>
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/ic_action_search"
android:actionViewClass="android.widget.SearchView"
app:showAsAction="always"/>
</menu>
然后,在我的活动(ActionBarActivity 的子类)中,我按如下方式创建菜单。
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflator().inflate(R.menu.main, menu);
MenuItem miSearch = menu.findItem(R.id.action_search);
SearchView view = (SearchView)miSearch.getActionView();
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
view.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mediaRouteMenuItem = mCastManager.addMediaRouterButton(menu, R.id.media_route_menu_item);
return true;
}
我尝试如下隐藏 MediaRoute 菜单项(此方法取自另一个 SO 帖子)。
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_search:
mediaRouteMenuItem.setVisible(false);
invalidateOptionsMenu();
return true;
}
}
然而,当用户点击搜索图标时,MediaRoute 菜单项仍然可见。
- 如果用户取消搜索操作,如果可以隐藏 ChromeCast 按钮,也很高兴知道如何使该按钮再次可见。
感谢任何帮助。
【问题讨论】:
-
如果您颠倒两个
<item>元素的顺序,将MediaRouteActionProvider放在第二个,会发生什么? -
@CommonsWare 那么这更像是我所针对的行为。 MediaRoute 菜单项实际上消失了。谢谢。
-
@CommonsWare 也许您应该复制并粘贴该单行字作为答案,我可以将其设置为答案。
标签: android android-actionbar chromecast