1. 程式人生 > >關於WindowManager.addView() 不顯示新增的View的問題!

關於WindowManager.addView() 不顯示新增的View的問題!

就不說怎麼來的了!!

遇到的問題:公司做一個IM聊天系統,想通過最小化來實現和QQ語音和QQ視訊類似的效果,但是老闆說使用者都是傻瓜 不會開啟懸浮窗許可權!!!!

所以讓我做一個不用懸浮窗許可權的  小視訊視窗 和小語音視窗

在做小視訊視窗的時候,之前的人寫的addview是寫在Service的onCreate中的,小視訊的addView沒有問題 ,用WindowManager.addView()正常顯示小懸浮窗!

但是在做語音的懸浮窗的時候,真的是一模一樣的程式碼!!!!除了佈局不一樣,其他的WindowManager.LayoutParams 引數全都一樣

,下面是程式碼

windowManager = (WindowManager)getApplication().getSystemService(Context.WINDOW_SERVICE);
linearLayout = (LinearLayout) LayoutInflater.from(getApplication()).inflate(R.layout.view_audio_surfaceview, null);
		WindowManager.LayoutParams params = new WindowManager.LayoutParams();
		params.width = WindowManager.LayoutParams.WRAP_CONTENT;
		params.height = WindowManager.LayoutParams.WRAP_CONTENT;
		
		params.type =WindowManager.LayoutParams.TYPE_TOAST;
		params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
		params.format=PixelFormat.TRANSLUCENT;
		params.width = 192;
		params.height =252;
		
		params.gravity = Gravity.RIGHT | Gravity.TOP;  
		params.alpha = 0.5f;
		windowManager.addView(linearLayout, params);

照這個程式碼是沒有問題的,但是就是在新增的時候就是不出來這個佈局,!!!

最後在網上檢視之後!發現 有一個朋友好像也是這個問題,addView之後  這個View不顯示的問題

解決辦法

linearLayout = (LinearLayout) LayoutInflater.from(getApplication()).inflate(R.layout.view_audio_surfaceview, null);
把這段程式碼 移動到 Service的onCreate方法中 即可

至於原因:下班之後看看怎麼回事!!!!在後續更新新增上來!!!!

在這裡記錄這篇文章 避免之後自己再犯同樣的錯誤,如果有朋友也是和我一樣的話!這個方法或許對你有幫助!!!