Есть ли способ создать виджет поверх всех окон?
Только недавно начал изучать dart+flutter. Ищу способ создать виджет, который накладывается поверх всех окон, чтобы он располагался где нибудь в уголке и при нажатии на него вызывалась какая-нибудь функция. Что-то вроде этого(синий кружочек с иконкой, постоянно на экране):
Не обязательно прилагать код, можно просто ссылку на документацию с подобным виджетом.
Ответы (1 шт):
Вам нужно создать свой 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 его планируют сделать доступным для всех и возможно что-то поменять в самом апи.