1

我有一个以下列方式工作的应用程序:

  • 屏幕的上部是应用程序的“主要”部分,用户可以与之交互的实际内容显示在这里。

  • 屏幕下部(可能是屏幕高度的 1/4 左右)是导航轮。用户可以转动这个轮子来改变显示屏的上部。当转动时,整个上部被其他东西取代。

这两部分是使用片段实现的。下部(导航轮)只是一个静态片段,显示可以旋转的视图层次结构。上半部分(内容展示区)也是一个fragment,转动滚轮可以切换到其他fragment。

现在我想要的是,当应用程序启动时,我们正在显示一个免费内容部分,但是当用户将滚轮转到其他内容部分之一时,会弹出一个窗口以阻止内容显示区域,并说“购买此模式谷歌播放。” 这个弹窗显然应该挡住它后面的内容区域,所以用户可以看到弹窗后面的一些显示区域,但是在完成 Google Play 交易之前他/她无法与之交互。如果内容区域的视图也可以变灰,那就太好了。然而,不应阻止屏幕底部的导航轮,以便用户能够导航回他/她来自的地方或进一步导航到另一个内容部分。如何制作一个阻止顶部视图层次结构交互但保持较低层次完整的弹出窗口?

据我所知,不可能使用PopupWindow 类来创建一个只会阻止其后面的某些屏幕的弹出窗口。它似乎总是阻止这一切。

这是设计的插图。“P”表示付费,“F”表示免费。在第二个屏幕上,应用程序应该忽略对内容部分(灰色窗口后面)的任何按下,但导航轮应该仍然可以转动。

谢谢你。

4

3 回答 3

3

在第二个屏幕上,应用程序应该忽略对内容部分(灰色窗口后面)的任何按下,但导航轮应该仍然可以转动。

您可以制作一个叠加层并将其设置为吃掉所有触摸事件(通过OnTouchListener在其上设置 a 或使用自定义布局,onTouch()方法覆盖为 return true)并将其放在正常片段内容的顶部。这样,实际内容将在下面可见,但不会收到任何触摸事件。您还可以像在图像中一样将一些内容添加到您的叠加层中。

此外,由于覆盖层只会覆盖付费片段,因此用户可以触摸底部的轮子(我不知道该轮子实际上是如何与您的片段交互的,因此上述方法可能不起作用)。

我做了一个小的基本样本作为例子(你可以在这里找到它)。

如果内容区域的视图也可以变灰,那就太好了。

您可以使用递归方法来遍历付费片段的视图层次结构并调用View.setEnabled(false)它遇到的视图。

于 2013-09-09T14:40:32.283 回答
0

使用一个按钮创建一个默认片段,打开 Google Play 的正确页面以购买内容。然后,每次转动导航轮时,您在代码中决定是显示带有内容的片段(当用户完成 Google Play 交易时),还是只显示带有 Google Play 按钮的默认片段。

只有一件事:Google Play 是异步的。可能有一段时间,用户实际上已经完成了交易,但 Google Play 还没有通知您的应用程序。

如果交易已启动,您必须决定是在无需 100% 清楚用户实际支付的情况下显示内容,还是显示空白片段。无论如何,您不应该再次显示该按钮,因为这会使用户感到困惑(“我付费了!为什么我需要再次访问 Google Play ???”)

于 2013-09-09T15:16:58.237 回答
0

对我来说似乎过于复杂..我无法想象设计..

如果用户购买了该项目,我会创建一个不同的片段来触发,具有不同的交互,例如每次点击时显示的对话框,或类似的东西。

在伪代码中:

if wheel.position == 4
    if itemPurchased
        showFullFragment
    else
        showMockFragment
于 2013-09-04T17:54:10.620 回答