当片段具有选项菜单时,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 的行为不正确的主要内容,如果未能解决你的问题,请参考以下文章

单击ListViewItem时Android加载片段

导航菜单和在android中的选择性片段上添加按钮

Android - 导航抽屉 - 与动态菜单项重叠的片段

隐藏许多选项时选择元素下拉菜单上的 Chrome 错误

如何将片段目标绑定到底部导航栏中的菜单项?

当 URL 包含片段时,iframe 会导致父元素在 Google Chrome 上向上滚动