2011-09-22 58 views
6

已经有人问过类似的问题,但没有多少运气。从服务启动视图?

假设我有一个服务,我需要一个视图来弹出它。同时,它们都应该是棘手的,即用户应该既能够在视图内单击按钮,也能够在后台单击服务中的按钮。

enter image description here

这在理论上是可行的吗?如果是,我应该如何初始化该视图?

谢谢!

+1

我不明白:上面显示服务的看法?服务通常在android中是不可见的(不要有任何UI)。也许你需要某种可定制的吐司功能。尝试编辑您的文章,并提供更多详细信息... – pkk

回答

1

服务在后台运行并且没有UI。所以你不能在服务上显示某些内容。

如果您需要服务通知用户某事,请使用Notification

Ayou可以使用Toast,但我建议不要这样做,因为它会混淆用户,因为它可以弹出另一个应用的活动。

+0

如何将视图添加到WindowManager?这不反驳你的第一个陈述吗? – JacksOnF1re

2

我想你是滥用“服务”一词。 服务不可见,活动可见。

服务中没有按钮!

所以你别无选择!您应该将两个视图放在一个Activity中,然后使用RelativeLayout并将您的孩子的可见性设置为GONE/Visible。

http://developer.android.com/reference/android/widget/RelativeLayout.html

而且使用弹出式窗口,使得其下的布局点击会打扰用户。您完全改变了用户体验。我强烈建议你也让你的弹出窗口出现在你的初始布局的顶部/底部

+1

我认为这是你最好的选择,如果你绝对必须达到这个效果。让自己成为一个包含在活动主布局中的布局,这种布局看起来像是一个弹出式窗口,只需在您希望的时候显示即可。除此之外,无法使前景和背景按钮都可点击。 – FoamyGuy

1

你想要的是一个活动,而不是一个服务和一个对话框,而不是视图。我建议你阅读谷歌的这个文件:http://developer.android.com/guide/topics/fundamentals.html

但是要回答你的问题关于两个互动。这是不可能的。在任何给定的时间1,只有1个活动位于活动堆栈的顶部。用户只能与该活动进行交互。如果你想要像浮动窗口那样的东西,那么你将不得不自己创建它。请记住,这违背了Android设计原则。

5

是的,它是可能的,你需要做的就是调用WindowManager服务并通过相同的添加您的看法。

WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE); 
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
RelativeLayout layout=(RelativeLayout) inflater.inflate(R.layout.box,null); 

你需要一个WindowManager.LayoutParams对象应包含参数布局

windowManager.addView(layout,params); 

好,加的观点