Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在操作栏中隐藏ChromeCast MediaRoute菜单项?_Android_Android Actionbar_Chromecast - Fatal编程技术网

Android 如何在操作栏中隐藏ChromeCast MediaRoute菜单项?

Android 如何在操作栏中隐藏ChromeCast MediaRoute菜单项?,android,android-actionbar,chromecast,Android,Android Actionbar,Chromecast,我试图在ChromeCast应用程序的上下文中使用ActionBar设置搜索界面(使用CastCompanyLibrary和VideoBrowserActivityGit项目的代码)。我需要一种方法来隐藏ChromeCast MediaRoute菜单项(简称ChromeCast按钮)。它与搜索图标并置,当用户单击搜索图标时,ChromeCast按钮应消失,以便允许搜索视图展开(尽可能多地打开ActionBar) 首先,定义我的ActionBar的XML如下所示 <menu xmlns:an

我试图在ChromeCast应用程序的上下文中使用ActionBar设置搜索界面(使用CastCompanyLibrary和VideoBrowserActivityGit项目的代码)。我需要一种方法来隐藏ChromeCast MediaRoute菜单项(简称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>
我试图隐藏MediaRoute菜单项,如下所示(此方法取自另一篇SO文章)

但是,当用户单击搜索图标时,MediaRoute菜单项仍然可见

  • 如果用户取消搜索操作,知道(如果可以隐藏ChromeCast按钮)如何使按钮再次可见也很好

非常感谢您的帮助。

我在这里所说的只是一些我没有测试过的想法,所以在阅读本文时要考虑到这一点。由于MediaRouterActionProvider由框架管理,我认为您不能手动隐藏它;我想系统会在定期扫描时覆盖它。我在这里看到两种选择:

  • 使用MediaRouteButton而不是ActionProvider;CCL也支持这一点,其可见性完全取决于您(CCL提供了一些回调,可以告诉您何时有与您的过滤器匹配的设备,并且您可以清楚地按照您认为合适的方式处理这些数据)。这是我推荐的方法

  • 使用黑客:有两个MediaRouteSelector;一个与不存在的appId关联(或未发布且没有与之关联的设备),另一个与良好的appId关联。如果使用第一个选择器,该按钮将消失,因为没有符合该appId的设备,第二个将正常运行


同样,我认为第一种选择是更干净。让我们知道它是否适合您。

我认为您看到的(或者现在看到的)是由动作提供者/动作类的顺序决定的。一个扩展的可折叠动作视图将占据动作栏末端的空间,但不会影响前面的内容。因此,将
SearchView
放在第一位会让它占据整个栏。

如果你颠倒两个
元素的顺序,将
MediaRouteActionProvider
放在第二位,会发生什么呢?@commonware那么这更像是我所针对的行为。MediaRoute菜单项实际上消失了。谢谢。@commonware也许你应该复制并粘贴那一行作为答案,我可以将它设置为答案。这些选项看起来有些过分,但你不能手动隐藏它。我在netflix或google Play Music应用程序等UI设计中看到的是,他们只需在ActionBar上添加搜索(图标)菜单项,当用户单击它时,就会打开一个新的活动。也许这是一个更好的流程和UI设计。谢谢
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;
}
public boolean onOptionsItemSelected(MenuItem item) {
 switch(item.getItemId()) {
  case R.id.action_search:
   mediaRouteMenuItem.setVisible(false);
   invalidateOptionsMenu();
   return true;
 }
}