Есть ли способ создать виджет поверх всех окон?

Только недавно начал изучать dart+flutter. Ищу способ создать виджет, который накладывается поверх всех окон, чтобы он располагался где нибудь в уголке и при нажатии на него вызывалась какая-нибудь функция. Что-то вроде этого(синий кружочек с иконкой, постоянно на экране): пример Не обязательно прилагать код, можно просто ссылку на документацию с подобным виджетом.


Ответы (1 шт):

Автор решения: blind.falcon

Вам нужно создать свой window manager с параметром WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, добавив в него нужное view, java пример:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSLUCENT);

    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    View myView = inflater.inflate(R.layout.my_view, null);
    myView.setOnTouchListener(new OnTouchListener() {
       @Override
       public boolean onTouch(View v, MotionEvent event) {
           return true;
       }
     });

    wm.addView(myView, params);

Для этого требуется разрешение, которое начиная с 23 api надо получать динамически

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

Либо можно использовать Bubble Api но этот функционал доступен только после включения настройки в developer options, то есть он не для production кода, а так же стоит учитывать то что в Android 11 его планируют сделать доступным для всех и возможно что-то поменять в самом апи.

→ Ссылка