【问题标题】:How to create custom PopupWindow from intent call?如何从意图调用创建自定义 PopupWindow?
【发布时间】:2013-04-15 13:05:34
【问题描述】:

我想创建一个与此类似的自定义 PopupWindow:

http://android-er.blogspot.kr/2012/03/example-of-using-popupwindow.html

在此示例中,PopupWindow 是由来自活动的按钮单击事件创建的,但我想通过来自另一个应用程序的意图创建 PopupWindow。 可能吗?任何 cmets 将不胜感激!

【问题讨论】:

标签: android android-intent popupwindow


【解决方案1】:

这个想法是声明一个标准的 Activity 使其看起来像一个弹出窗口。

使用此代码(标准样板代码Intent 来触发Activity

SOME_WIDGET.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent myIntent = new Intent(getApplicationContext(), THE_POPUP_ACTIVITY.class);
        startActivity(myIntent);
    }
});

例如,如果您将弹出窗口 Activity 命名为 Popup,则将 THE_POPUP_ACTIVITY.class 替换为 Popup.class

现在,对于这个活动,在清单中声明一个theme。例如:

这是对应的样式声明:

<style name="DialogNoTitleBar" parent="android:style/Theme.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

另外,在弹出活动的onCreate() 中,您可能想在setContentView(R.layout.THE_LAYOUT_XML); 之后添加此语句,我说可能,因为您希望它出现的方式可能与我的方式不同编程我的弹出活动。

getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

【讨论】:

  • 谢谢,冰人!!我将此自定义主题应用于我的活动,但仍然无法得到我想要的。我认为我应该使用“PopupWindow”,因为我的弹出窗口应该在焦点更改为其他活动或视图时出现。顺便说一句,我从你的 cmets 那里得到了很多启示!谢谢!
  • @NariKim:我发布的解决方案并不是你想要的样子。当然,我的代码会根据您的要求而有所不同。我所提供的是一个关于如何去实现你所需要的东西的指针。当然,请记住,您必须进行自己的定制。 我还想在不弹出弹出窗口的情况下与基本活动进行交互! 无论您选择使用哪种方法/解决方案,这都是不可能的。您可以像往常一样在Intent 中传递额外内容,但除此之外,PopupWindow 或像我这样的解决方案总是会转移焦点。
  • 感谢您的评论。我认为我最初的问题有点模棱两可。我在@AndyFaizan 的回答中留下了更多描述,我找到了解决方案。通过使用service,我可以在没有 UI(或 Activity)的情况下获得意图,并且根据这个link,我可以保持对我的弹出窗口的关注而不会解雇。
  • @NariKim:我认为你误解了我的评论。这是您在 Jashan 帖子中的评论的一部分:我还想与基本活动进行交互而不会弹出弹出窗口。这是它的症结所在,我说过这是不可能的,并且会失去焦点:与基础活动交互。不用说,弹出窗口会自然获得焦点,因为它现在在屏幕上处于活动状态。
【解决方案2】:

您的要求不是很清楚。当您想要切换到另一个活动或可能将意图发送到某种服务时,通常会使用意图。如果你想为一个动作打开一个对话框,你真的不需要意图。

【讨论】:

  • 感谢您的评论安迪!我目前正在制作一个可以在其他应用程序中使用的独立库。在我的库中,我有几个组件并希望通过弹出窗口而不是对话框来显示这些组件。所以我的场景是这样的。在应用程序端,他们可以向我的库发送一个意图,在我的库中,一个活动将获得这个意图,并根据意图消息显示 PopupWindow。另外我想只显示 PopupWindow,而不是活动,这有意义吗?
  • 好的。在那种情况下,我猜 IceMan 的答案几乎是可行的。
【解决方案3】:

使用您的自定义设计创建一个活动,在清单文件中注册活动时,只需添加此android:theme="@android:style/Theme.Dialog" 并根据您的意图调用活动。希望你明白了。 :)

【讨论】:

  • 谢谢贾珊!我已经尝试了您的建议,它看起来与我的预期非常相似。但我还有一个问题。是否可以更改其弹出位置或添加一些动画效果?我还想与基本活动进行交互而不会弹出弹出窗口! :)
  • 是的,我认为这是可能的。只需查看此博客android-codes-examples.blogspot.in/2011/04/… 和此问题stackoverflow.com/questions/7478417/… 可能会对您有所帮助..
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多