2014-09-05 123 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

相關問題