【问题标题】:Popup menu goes out of the screen弹出菜单离开屏幕
【发布时间】:2016-07-31 03:46:01
【问题描述】:

inflate 上的弹出菜单会在此活动的屏幕上消失,其他活动也可以正常工作

扩展自定义 AppCompatActivity

样式:

<style name="AppTheme.ActionBar.TransparentContextTranscition" parent="AppTheme.NoActionBar">
    <item name="android:windowActivityTransitions">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowLightStatusBar">true</item>

    <item name="android:itemBackground">@android:color/white</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@android:color/white</item>
</style>

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
</style>

Java 代码

holder.contextMenuView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final PopupMenu popup = new PopupMenu(v.getContext(), v);
            popup.inflate(R.menu.song_item_menu_album_inner_layout);
        }
});

工具栏膨胀菜单工作正常

【问题讨论】:

  • 你用锚了吗?也显示java代码。
  • 更新了@SohailZahid
  • 可能听起来很傻,但是今天早些时候我在模拟器上发生了这种情况,我最终在我的设备上尝试了它并且效果很好。进行了清理和重建,问题自行解决。
  • 很好,然后回答您自己的问题并打勾。
  • 做了清理项目并重建仍然无法正常工作.... @ziondreamt

标签: android android-layout user-interface android-activity android-appcompat


【解决方案1】:

看起来我正在使用

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

我的错。 FLAG_LAYOUT_NO_LIMITS,删除上下文菜单的限制。 (这就是原因,上下文菜单退出屏幕),希望对某人有所帮助

【讨论】:

  • 如何在弹出菜单中使用FLAG_LAYOUT_NO_LIMITS,有什么解决办法吗?
  • 抱歉回复晚了,我没有找到任何解决方案。所以我删除了 FLAG_LAYOUT_NO_LIMITS。抱歉回复晚了,希望对大家有所帮助。
【解决方案2】:

在你的代码中使用这个:

final PopupMenu popup = new PopupMenu(v.getContext(), v, Gravity.RIGHT);

如果它不起作用,则更改锚视图 v。因为它可以根据您的要求设置弹出菜单的位置。

【讨论】:

    【解决方案3】:

    一个简单但可自定义的 Android 下拉菜单。它支持带/不带图标、分隔符的文本,甚至完全自定义的视图

    https://github.com/shehabic/Droppy

    【讨论】:

      【解决方案4】:

      不幸的是,弹出菜单不符合其内部视图的大小并超出范围。我以前也有同样的问题。我知道这不是最好的解决方案,但它就是这样:

      创建一个透明假视图,以使用作为锚点来阻止边缘超出。

      但是,由于它会浮动,因此您不能将其放置在顶部或底部,因此在尝试此操作时要小心超出高度。

      顺便说一下不要忘记设置android:anyDensity="True/False"

      【讨论】:

      • 如何实现,能否提供一些步骤
      • 好吧,我没有你的完整布局,所以我不知道你的 LinearLayouts 和 Floating items 等是如何定位的。但我可以解释主要思想,然后你就会明白。所以问题是弹出窗口不符合你的优势,所以你必须在某个地方更换它,从外面看就可以了,对吧?您将弹出窗口留在那里,但您将其充气到另一个视图中,该视图是假的且位于/浮动的)让我们在左侧说一下。因此,当弹出菜单在其中膨胀时,它会在正确的位置完美显示。你欺骗了设计的外观。祝你好运
      • 我再次说这绝对不是最好的解决方案,听起来你放弃了你的编码才能并试图作弊。但这不是全部吗?找到一种简单的方法来做正确的事情。如果有人建议与代码相关的解决方案,请关注该主题,以便我也可以学习和修复我的旧应用程序。
      • 它可能无法在大型设备或不同的 sdk 上完美运行(如果有误,请纠正我)
      • 不是我已经说过的最佳解决方案。但是这个想法是一样的,这完全取决于你的设计。您可以放置​​一个看起来像弹出菜单的布局,并在其中放置固定大小的选项,并在其中有一个 scroolview,因此即使有 100 个选项也很有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多