2017-04-26 30 views
0

我需要一個視圖來顯示在我的應用程序的頂部,當它顯示時,它可以繼續顯示在我的應用程序的其他視圖(所有片段和活動)的頂部。這聽起來像是一個浮動操作按鈕,但將始終顯示在我的應用程序的頂部。Android:如何將視圖添加到WindowManager,並始終將其保持在應用程序的頂部?

我知道我可以通過將視圖添加到我的手機的WindowManager中,並在我退出我的應用程序時隱藏它,當我恢復我的應用程序時再次顯示它。這種棘手的方法可以工作,但它也需要一些額外的權限,這是我試圖避免的。

如果我只想在我的應用程序中顯示,我可以實現它,而無需向用戶提出額外的許可?如果答案是肯定的,那麼如何?關鍵看起來像一些LayoutParams的視圖,我試過但失敗了。

如果答案能夠顯示一些細節代碼和解釋,那將會很好。

回答

2

你必須使用窗口管理器,用於此目的

首先添加許可清單中

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

添加要顯示的圖像。

chatheadImg = (ImageView)chatheadView.findViewById(R.id.chathead_img); 

然後製作服務並添加窗口管理器。

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
      PixelFormat.TRANSLUCENT); 
    params.gravity = Gravity.TOP | Gravity.LEFT; 
    params.x = 0; 
    params.y = 100; 

而剛剛註冊的視圖觸摸事件

chatheadView.setOnTouchListener(new View.OnTouchListener() { 
@Override 
     public boolean onTouch(View v, MotionEvent event) { 
     Switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 

         //To do 
        break; 
       case MotionEvent.ACTION_MOVE: 

       break; 

}); 

檢查這些教程爲了更好地理解

http://www.androidhive.info/2016/11/android-floating-widget-like-facebook-chat-head/

https://github.com/henrychuangtw/Android-ChatHead

+1

感謝這個答案,但我真不」不想向我的用戶索取該許可。沒有這個權限的任何方式將不勝感激。 – Anthonyeef

+1

在android 6.0下面,你不需要問那個權限,但是啓動android 6.0你必須明確地要求權限。 –

相關問題