2017-04-16 6 views
3

나는 lockscreen에 표시 할 수있는 뷰가 있습니다. 그러나 나는 그것을 선택적으로 만들고 싶다.WindowManager.LayoutParams 유형을 프로그래밍 방식으로 변경하는 방법은 무엇입니까?

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, 
WindowManager.LayoutParams.WRAP_CONTENT, 
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | 
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSPARENT); 

을 그리고 잠금 화면에 표시되지 위해 나는 그들이 잘 작동하지만 프로그래밍 종류와 플래그를 변경하려면

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.TRANSPARENT); 

별도로를 사용 : 현재 나는 이것을 달성하기 위해이 PARAMS를 사용합니다. 그래서 나는 형식을 제거 플래그를 제거하고 새로운 유형, 을 설정

params.flags &= ~WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 
params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 
params.flags |= WindowManager.LayoutParams.TYPE_PHONE; 
windowManager.updateViewLayout(myView,params); 

으로 WindowManager.LayoutParams을 변경하려하지만 그건 작동하지 않습니다. 아무도 이것을 정확하게하는 방법을 알고 있습니까?

답변

2

type 값을 flag에 설정하고 있습니다. 대신 다음을 시도하십시오 :

params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 

// type is no bit flag, so this should do it 
params.type = WindowManager.LayoutParams.TYPE_PHONE; 
+0

어떻게'type' 속성을 놓쳤습니까? 고맙습니다! – Denny