当片段具有选项菜单时,Android Chrome Cast 介绍 Overlay 的行为不正确
Posted
技术标签:
【中文标题】当片段具有选项菜单时,Android Chrome Cast 介绍 Overlay 的行为不正确【英文标题】:Android Chrome Cast Introduction Overlay has incorrect behaviour when fragment has options menu 【发布时间】:2019-12-17 02:32:32 【问题描述】:我将 Cast 按钮显示为从 Activity 膨胀的 Options 菜单项,但我注意到当 Activity 具有子 Fragment 并且子 Fragment 本身没有选项菜单项时,Chrome Cast 介绍覆盖正常工作。但是,当片段有自己的选项菜单时,演员介绍叠加层无法正常工作,它要么显示在左上角,要么显示在正确的位置,但没有突出显示演员图标。
这是初始化 Overlay 的代码
override fun onCreateOptionsMenu(menu: Menu?): Boolean
loadCastButton(menu)
return super.onCreateOptionsMenu(menu)
private fun loadCastButton(menu: Menu?)
menuInflater.inflate(R.menu.menu_cast, menu)
CastButtonFactory.setUpMediaRouteButton(applicationContext, menu, R.id.cast_menu_item)
val mediaRoutebutton = menu?.findItem(R.id.cast_menu_item)?.actionView as? MediaRouteButton
mediaRoutebutton?.dialogFactory = CastDialogFactory()
handleCastTutorial(menu)
private fun handleCastTutorial(menu: Menu?)
val castButton = menu?.findItem(R.id.cast_menu_item)
if (castButton == null)
return
castViewModel.isCastingAvailable.observe(this)
if (it == true && castButton.isVisible)
//Show cast tutorial
castViewModel.setCastTutorialShown(true)
IntroductoryOverlay.Builder(this, castButton)
.setTitleText(R.string.cast_tutorial_title)
.setSingleTime()
.build()
.show()
【问题讨论】:
【参考方案1】:当您在片段和活动中显示 Cast 按钮时,菜单会到处膨胀,Cast 按钮在片段或活动之一中初始化,然后立即再次隐藏。我推荐的解决方案是稍微延迟演员教程,然后再次检查可见性和窗口附加状态:
if (!castViewModel.getCastTutorialShown())
binding.root.postDelayed(200L)
// Check if it is still visible.
if (castButton.isVisible && castButton.actionView.isAttachedToWindow && !castViewModel.getCastTutorialShown())
castViewModel.setCastTutorialShown(true)
IntroductoryOverlay.Builder(this, castButton)
.setTitleText(R.string.cast_tutorial_title)
.setSingleTime()
.build()
.show()
【讨论】:
谢谢,将此与其他策略相结合以延迟教程的工作。以上是关于当片段具有选项菜单时,Android Chrome Cast 介绍 Overlay 的行为不正确的主要内容,如果未能解决你的问题,请参考以下文章