2014-09-05 99 views
2

我正在编写一个需要在客户端应用程序顶部显示活动的android库。经过一些阅读后,似乎添加一个新窗口是我想要做的,所以我添加了此权限。如何将活动添加到WindowManager中

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

然后我尝试这样做

 windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

     WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 

     params.gravity = Gravity.BOTTOM | Gravity.LEFT; 
     params.x = 10; 
     params.y = 100; 

     ImageView imageview = new ImageView(this); 

     imageview.setImageResource(R.drawable.avatar); 
     windowManager.addView(imageview , params); 

但我想要的是对客户端应用程序窗口的顶部这个新窗口我自己的活动添加图像视图。这甚至有可能吗?我将如何做到这一点?

回答

6

好吧,正确的做法似乎是膨胀服务类中的布局,并将其添加到windowmanager中。然后创建一个常规的java类,该类可以用作该布局中的操作的事件侦听器。我不需要使用片段或活动。

mRootLayout = (LinearLayout) LayoutInflater.from(context). 
       inflate(R.layout.myContainerXML, null); 
MyListManager myListManager = new MyListManager(mRootLayout,context); 

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.MATCH_PARENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
       PixelFormat.TRANSLUCENT); 

ListView listView = (ListView) mRootLayout.findViewById(R.id.listView); 
     final MyListAdapter adapter = new MyListAdapter(activity,R.layout.list_row,(ArrayList)myListManager.getList()); 
     listView.setAdapter(adapter); 

windowManager.addView(mRootLayout, params); 

如果任何人有一个更好的办法,我很想听到感谢

+0

嗨,我试图做类似的东西。你可以发布MyListManager的代码吗?我看到你将夸大的视图传递给了类的构造函数。但你如何附加事件监听器?你是否用Activity来扩展你的课程? – Neelam 2016-01-12 13:53:07