Chciałbym narysować ikonę (wskaźnik myszy) na ekranie w stosunku do innych aplikacji z usługi. Zaimplementowałem funkcjonalność i mogę rysować na ekranie, poza paskiem nawigacji. Sprawdziłem tutaj: severalotherquestions i wypróbowałem TYPE_SYSTEM_OVERLAY
, TYPE_TOAST
, TYPE_SYSTEM_ERROR
i kilka innych typów okien bez powodzenia.Rysowanie na pasku nawigacyjnym (i innych aplikacjach) w wersji Android> = 5
Nie próbuję przechwycić fokusa, po prostu rysując wskaźnik myszy na ekranie przez sekundę lub dwie. Kiedy próbuję narysować nad paskiem nawigacyjnym, to po prostu przechodzi pod (w rzeczywistości RelativeLayout kończy się na granicy z paskiem nawigacji - nawet gdy określam wymiar ręczny dla wysokości). Poniższy zrzut ekranu pokazuje wskaźnik dłoni w prawej dolnej części ekranu. To tak nisko, jak mogę to ustawić. Zauważ, że nie próbuję ukrywać paska nawigacji w mojej aplikacji - próbując narysować inne aplikacje.
Próbowałem nawet ustawienie xpos
i ypos
przesunięcie ustawienia w WindowManager.LayoutParams
przykład, ale to tylko równoważy układ i nadal spada poniżej paska nawigacyjnego).
params układ Używam aby pokazać okno:
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
PixelFormat.TRANSPARENT);
jestem następnie dodanie RelativeLayout
z tych parametrów do managerem okien: windowManager.addView(relativeLayout, params);
Czy zadeklarowałeś uprawnienie "narysuj na innych aplikacjach" na twoim pliku manifestu? –
@ mr.icetea tak, oczywiście, inaczej nie byłbym w stanie narysować w ogóle. pasek stanu również, nie na pasku nawigacyjnym (na dole, gdzie są tylne, domowe i ostatnie klawisze programowalne) – miha