帮助弹出菜单
Posted
技术标签:
【中文标题】帮助弹出菜单【英文标题】:Helping out with popup menu 【发布时间】:2019-11-22 05:43:33 【问题描述】:我有一个 android 音乐应用。这是一个使用 SoundPool 播放声音的 pad 应用程序。 我想要实现的是一个用户可以选择自己和弦的页面。 我已经实现了一个弹出菜单,它可以工作,但是我不知道在弹出菜单中单击所选和弦后如何更改按钮。
我提供了一个屏幕截图,以便您了解我的意思。
这是截图:
有人知道如何制作这样的东西吗? 基本上按钮是灰色的,然后你选择一个和弦,它会改变按钮的颜色和文本以及 onclick 事件来播放和弦。
【问题讨论】:
你在寻找这样的东西吗,github.com/MasayukiSuda/BubbleLayout 发布到目前为止所做的事情。 @ganesh-pokale 抱歉,没有 【参考方案1】:我会这样做:
首先,按钮网格实际上是一个带有自定义视图和一个 GridLayoutManager 的 RecyclerView。
其次,我将有一个与 RecyclerView 中的每个项目关联的模型类。此模型将包含它应该播放的声音和您可能想要的其他内容。
第三,我将一个自定义适配器附加到 RecyclerView。每个项目都有一个关联的模型对象。当我点击一个对象时,我会首先检查它是否附有一些声音(通过检查关联的模型对象)。如果是,我会简单地播放声音。如果没有,我将显示弹出菜单。在选择弹出菜单时,我将使用所选数据更新关联模型,然后更新按钮的视图。
编辑(对 GridView 执行相同操作)
您想要实现的目标背后的逻辑将与上述大部分相似,只是您管理项目的方式有所改变。以下是所需的步骤
首先,您必须创建一个 GridView,其中包含您所看到的尽可能多的按钮。为每个按钮分配一个唯一的 ID,以便访问。
其次,创建一个模型类(与RecyclerView的情况相同)。
第三,将点击侦听器附加到 GridView 中的每个按钮。单击时,您将检查与该按钮关联的模型对象。如果它附有一些声音,您将播放该声音。否则,您将显示弹出菜单并在选择项目时将其分配给模型对象。
【讨论】:
如果您希望我进一步详细说明上述任何步骤,请告诉我。 听起来很有趣。我将不得不阅读有关 RecyclerView 的更多信息,因为我从未使用过它。顺便说一句,我正在使用片段。这会影响这种方法吗? @derpaherpa 一点也不。您可以在片段中使用 RecyclerView。 我可以使用 GridView 代替 RecyclerView 吗? 技术上你可以。但是,这将需要您分别在每个网格项上添加点击侦听器。我将更新我的答案以包括如何使用 GridView。【参考方案2】:有两种方法可以实现它。
1.通过视图实现
通过视图实现此功能,与上下文菜单相比,这具有一个优势,您可以设计自己的视图并像 Pinterest 的应用程序一样实现它
2.通过上下文菜单实现
上下文菜单是内置函数,可让您实现菜单类型。这是内置视图,您可以编写几行代码来实现
【讨论】:
以上是关于帮助弹出菜单的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2019 中禁用重构菜单箭头/弹出窗口?