2011-09-22 10 views
6

既に似たような質問がありましたが、運がほとんどありません。サービスからのビューの開始?

サービスがあり、その上にポップアップ表示する必要があるとします。同時に、それらは両方とも扱いにくいものでなければならない。すなわち、ユーザは、ビュー内のボタンと、バックグラウンドでサービス上のボタンとの両方をクリックすることができるべきである。理論的にはこれは可能

enter image description here

ですか?はいの場合、そのビューをどのように初期化する必要がありますか?

ありがとうございます!

+1

を追加し、私は理解していない:サービス上記の図を示していますか?サービスは一般的にアンドロイドでは見えません(UIはありません)。たぶん、カスタマイズ可能なトースト機能が必要になるかもしれません。投稿を編集して詳細を入力してください... – pkk

答えて

1

サービスはバックグラウンドで実行され、UIはありません。だから、あなたはサービスの上に何かを見せてはいけません。

ユーザーに何かについて通知するサービスが必要な場合は、Notificationを使用してください。

私はToastを使うことができましたが、別のアプリのアクティビティでポップアウトする可能性があるため、ユーザーを混乱させる可能性があります。

+0

WindowManagerへのビューの追加はどうですか?それはあなたの最初の陳述を反証していませんか? – JacksOnF1re

2

あなたは「サービス」という言葉を誤解していると思います。 サービスは不可視ですが、アクティビティは表示されます。

サービスにボタンはありません!

あなたは選択の余地がありません。両方のビューを1つのアクティビティに配置する必要があります。私はRelativeLayoutを使用し、キッドンの可視性をGONE/Visibleに設定します。

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

また、ポップアップを使用して、その下にレイアウトを作成すると、ユーザーを邪魔しますクリッカブル。あなたは完全にユーザー体験を変えています。あなたの最初のレイアウトの上部/下部にポップアップを表示させることを強くお勧めします。

+1

あなたがこの効果を絶対に達成しなければならないなら、これはあなたの最善の策だと思います。自分のアクティビティーのメインレイアウトの中にレイアウトを作り、ポップアップのように見えるようにして、必要なときに表示させるだけです。これ以外に、前景と背景の両方のボタンをクリック可能にする方法はありません。 – FoamyGuy

1

サービスの代わりにアクティビティと、代わりにダイアログを表示します。私はこの文書をgoogleで読むことをお勧めします:http://developer.android.com/guide/topics/fundamentals.html

しかし、両方とも対話可能であることについてのあなたの質問に答えてください。これは不可能です。任意の時点で、アクティビティスタックの最上部にアクティビティが1つだけあります。ユーザーは、そのアクティビティとしか対話できません。フローティングウィンドウのようなものが必要な場合は、自分で作成する必要があります。しかし、アンドロイドの設計原則に反することに注意してください。

4

実行しているサービスインスタンスからビューを追加します。このようにして、すべてのアクティビティ(どこからでも)でビューを永続させることができます。この偉大な例を参照してください:

http://www.piwai.info/chatheads-basics/

+0

+リンクとそれ自身に答えるupvote! – NitZRobotKoder

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.addView(layout,params); 

まあのためのパラメータが含まれている必要がありWindowManager.LayoutParamsオブジェクトが必要ですが、ビュー