短視頻PHP源碼android 實現懸浮控件

實現桌面View
如桌面歌詞

1)將要顯示在桌面的view,通過WindowManager.addView,掛在到WindowManager下;注意,WindowManager對象來源,源碼有解釋。
並且配置好view的WindowManager.LayoutParams
1-1)WindowManager.LayoutParams.type

設置爲 WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;時,桌面UI不可以直接setOnClickListener(),該View的onTouchEvent()函數也無效了
         設置爲WindowManager.LayoutParams.TYPE_SYSTEM_ALERT(2003)或者WindowManager.LayoutParams.TYPE_PHONE(2002)纔有效。

1-2)WindowManager.LayoutParams.flag

設置爲LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE
 如果設置了WindowManager.LayoutParams.type爲2002,2003;那麼flag不設置爲這兩個flag的話,那麼其他組件就無法獲得touch和focus事件了。
 設置了該兩個屬性之後就大家都可以獲得Touch和Focus事件

2)androidManifest裏申明權限

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
	private void initDestopText(View childView){
 
		//直接通過Activity獲取的 WindowManager,在act退出時,桌面組件也將退出。
//		WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); 
		//一定要通過getApplicationContext()獲取WindowManager,這種情況下,當Application終止後,懸浮控件纔會被退出
		WindowManager wm = (WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE); 
		
		
		WindowManager.LayoutParams params = new WindowManager.LayoutParams();  
//		params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;  	//如果設置爲
		params.type = WindowManager.LayoutParams.TYPE_PHONE; // 
		params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE;
		params.width = WindowManager.LayoutParams.WRAP_CONTENT;  
		params.height = WindowManager.LayoutParams.WRAP_CONTENT;  
		wm.addView(childView, params);  
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章