Создание окон произвольной формы android

Как использовать скрытый режим рабочего стола на устройствах Android 10

Одной из самых ранних функций Android 10, появившихся в предварительных версиях для разработчиков, был режим десктопа, подобный Samsung DeX. К сожалению, эта функция была чуть больше, чем простой набор и скрыта глубоко в параметрах разработчика. Что еще хуже, Google Pixel 4 вообще не может использовать режим рабочего стола, поскольку Google отключил его «из коробки». Тем не менее, вы все равно можете использовать его на определенных смартфонах, таких как Essential Phone, OnePlus 7/7 Pro, OnePlus 7T/7T Pro и телефонах с видеовыходом через USB-C. Вот несколько полный список устройств, которые поддерживают вывод видео через USB-C. Наконец, вам понадобится переходник USB-C на HDMI. Не стесняйтесь забрать один из Амазонки. Добавьте Bluetooth-клавиатуру и мышь для более полного опыта. Теперь выполните следующие шаги:

  1. Включить параметры разработчика на вашем телефоне.
  2. Перейдите в «Настройки»> «Параметры разработчика» и прокрутите вниз, пока не дойдете до раздела «Приложения». Найдите переключатели под названием «включить окна произвольной формы» и «включить режим рабочего стола». включите их оба и перезагрузите телефон.
  3. Загрузите и установите этот APK, созданный изобретательным участником XDA Developers.
  4. После установки APKm перейдите в «Настройки»> «Приложения и уведомления»> «Приложения по умолчанию» и установите «Lawnchair» в качестве панели запуска по умолчанию.
  5. Подключите телефон к монитору/телевизору с помощью адаптера.
  6. Теперь вы увидите всплывающий интерфейс рабочего стола Android 10 на экране. Предоставьте TaskBar разрешения, которые он запрашивает, а именно «отображение поверх других приложений» и «доступ к использованию».

Теперь вы сможете использовать всю мощь своего смартфона в комплекте с клавиатурой/мышью. Он не имеет такого уровня блеска, как Samsung DeX или Huawei Easy Projection, но он справится с работой. Вы можете легко запустить многозадачность и работать на уровне, который был бы невозможен на дисплее смартфона. Неясно, почему Google не включил режим рабочего стола из выпуска Android 10. Смартфон, который превращается в ноутбук, побуждает пользователей покупать ноутбуки, и это может быть одной из причин.

Как понизить версию Android 11 Beta до Android 10 на телефонах Google Pixel

Источник

Диалоговые окна в Android. Часть 1

Dialog

Dialog — это класс, принадлежащий Android SDK и помогающий нам, простым смертным программистам, работать с диалоговыми окнами в Android. Класс Dialog имеет 4 подкласса:

  • AlertDialog: это диалоговое окно для различных сообщений приложения, например «Вы хотите купить мое приложение?» или что то в этом роде. AlertDialog поддерживает три кнопки — утвердительную (OK), отрицательную (Cancel) и нейтральную (Later).
  • ProgressDialog: это диалоговое окно для отображения выполнения различных процессов, загрузки, например.
  • DatePickerDialog: диалоговое окно предлагает пользователю выбрать дату.
  • TimePickerDialog: диалоговое окно предлагает пользователю выбрать время

На первом из этого списка, AlertDialog мы и остановимся подробнее.

AlertDialog

Чтобы создать диалоговое окно AlertDialog нам в помощь потребуется экземпляр класса Builder:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Теперь, когда у нас есть builder, мы можем «строить» свое собственное диалоговое окно. В параметры диалогового окна Вы можете написать множество различных параметров, но основными являются эти:

  • setTitle(int resID) — задает заголовок диалогового окна, принимает в качестве аргументов ссылку на ресурс или строку.
  • setMessage(int resID) — задает сообщение в диалоговом окне, также принимает ссылку на ресурс или строку.
  • setPositiveButton(int textID, DialogInterface.OnClickListener listener) — устанавливает на Вашем диалоговом окне утвердительную кнопку с текстом ресурса textID и слушателем listener. Методы setNegativeButton и setNeutralButton идентичны, с разницей в назначении кнопок.

Пример создания AlertDialog:

В этом примере я использовал setCancelable(true) — это разрешает пользователю закрывать диалоговое окно с помощью хардварной кнопки Back. Еще я создал слушателя для утвердительной кнопки и использовал метод create(). Метод create() возвращает готовое диалоговое окно с вашими параметрами как экземпляр класса AlertDialog.
Вот мы и создали диалоговое окно! Следующая задача — показать его пользователю. Вот тут есть несколько вариантов:

  • showDialog(AlertDialog dialog) — самый простой способ показать диалоговое окно, но начиная с версии 3.0 разработчики Android не рекомендуют пользоваться этим методом, и в результате вы получите предупреждение, которое можно обойти только @SurpressWarning, что есть не совсем хорошо.
  • AlertDialog dialog.show() — альтернативный способ показать окно, для этого в экземпляре dialog должен лежать результат метода Builder.create().

Второй метод нам подходит больше, но писать в основной активности кучу различных Buider и AlertDialog портит читабельность кода. Поэтому целесообразней вынести создание и обработку диалоговых окон в новый класс, например:

Единственная заметка по поводу этого кода будет про использования метода setView(View view) в диалоге IDD_SETTINGS. У AlertDialog как и у всех остальных диалоговых окон есть одна приятная особенность — им можно задавать собственные Layout, что позволяет полностью видоизменять диалоговые окна и их содержимое. Здесь есть один подводный камень: обработку элементов этого Layout вы должны будете производить именно в той Activity, где вызываете это диалоговое окно. Например я показываю диалоговое окно IDD_SETTINGS в MainActivity с Layout по имени settings:

Читайте также:  Android smart tv m7 dexp обзор

Соответственно я загружаю это окно в MainActivity:

Метод initSettings класса MainActivity в данном случае будет выглядеть так:

Ну а дальше обрабатываете свои объекты как вам угодно.

Небольшой итог

1) Для большинства целей диалоговых окон подходит AlertDialog
2) AlertDialog может принимать вид layout с любыми объектами
3) Гораздо лучше использовать для диалоговых окон отдельный класс и пользоваться AlertDialog.show()
4) Обработка объектов кастомного layout производится в активности, вызвавшей диалог

В следующей части этой статьи пойдет речь о DialogFragment, который был включен в Android SDK начиная с 3.0 Honeycomb. Надеюсь эта статья поможет новичкам и не очень в своих квестах по завоеванию Google Play.

Источник

Как включить режим Windows произвольной формы в Android 7.0 [No Root]

Android 7.0 имеет скрытый режим произвольной формы, который позволяет расположить несколько окон приложений рядом или одно поверх другого на экране. Подобно тому, как на рабочем столе может быть открыто несколько окон, этот режим окон произвольной формы работает аналогично. Он лучше всего подходит для планшетов, но любое устройство под управлением Android 7.0 может переключиться на него, если вы знаете, как его разблокировать. Большинство методов разблокировки включают рутирование вашего устройства, но есть популярное приложение для запуска Android под названием Панель задач, которое позволяет вам делать это без рута. Вот как разблокировать режим Windows произвольной формы в Android 7.0.

Перед установкой панели задач вам необходимо включить параметры разработчика. Для этого откройте приложение «Настройки» и перейдите в раздел «О телефоне». Коснитесь номера сборки семь раз, и параметры разработчика будут включены.

Затем перейдите в Параметры разработчика и прокрутите вниз до самого низа. Включите параметр «Принудительно изменять размер действий». Затем установите панель задач и предоставьте ей запрашиваемые разрешения. Удалите все последние приложения и перезагрузите устройство.

После перезагрузки устройства запустите панель задач. Он добавляет плавающую кнопку внизу. Нажмите кнопку обзора, а затем нажмите плавающую кнопку на панели задач. Вы увидите список всех приложений, установленных на вашем устройстве. Коснитесь устройства, и оно запустится в режиме произвольной формы.

Коснитесь плавающей кнопки на панели задач и запустите второе, третье и четвертое приложение из меню. Приложения запускаются как окна, как на рабочем столе. Вы можете перетаскивать их и размещать как хотите.

В окнах приложений есть две кнопки; полный экран и закрыть. Нажмите кнопку полноэкранного режима, чтобы выйти из режима freefrom. Кнопка закрытия, очевидно, выйдет из приложения.

Иногда у вас могут возникнуть небольшие проблемы с некоторыми приложениями. В противном случае стабильные приложения могут иногда давать сбой, но это редкое явление.

Источник

Десктопный режим / Режим рабочего стола в Android 10: как включить и настроить

Так называемый десктопный режим (Desktop Mode или Режим рабочего стола), в качестве встроенной функции будущей Android 10, появился достаточно давно, в одной из первых тестовых версий системы для разработчиков.

Если вкратце, то десктопный режим в Android 10, по аналогии с приложением Samsung DeX, позволяет подключать к Android-смартфону или планшету внешний дисплей, чтобы удобнее было просматривать контент или работать с подключенной клавиатурой и мышью (как на компе).

При этом на оба экрана можно выводить как одно приложение, так два разных без прекращения работы (посредством функции «многозадачного восстановления»). Плюс, возможностью перемещения и масштабирования окон на большом экране, возможность одновременно использовать экранную (виртуальной) клавиатуры на экране смартфона/планшета в качестве клавиатуры компа и пр.

Однако до сих пор, не смотря на то, что Android 10 уже вышла, десктопный режим так и остается экспериментальной «загадочной фичей» для разработчиков, запрятанной глубоко в закрытом разделе настроек операционки. И даже у нынешнего флагманского Pixel 4 этот режим в настоящее время официально отключен.

И, тем не менее, у некоторых смартфонов, которые уже получили новый Android 10, в частности у Essential Phone, OnePlus 7 и 7 Pro, OnePlus 7T и 7T Pro и некоторых других моделей, поддерживающих вывод видео через порт USB-C (DisplayPort Alt Mode), Режим рабочего стола вполне себе успешно функционирует, правда, пока тоже не просто так.

По состоянию на сейчас, для подключения совместимого смартфона к большому экрану и настройки Рабочего стола Android 10 помимо самих этих двух устройств, а также переходника с USB-C на HDMI, клавиатуры и мыши, требуется соответствующую функцию искать и включать. Но это с недавних пор — проблема тоже решаемая. И сейчас расскажем, как именно всё обустроить. Итак.

как включить и настроить Десктопный режим / Режим рабочего стола в смартфоне с Android 10

Значит, по порядку. Из самых необходимых требований:

  • Android 10;
  • поддержка DisplayPort Alt Mode (его поддерживают большинство моделей с процессорами Qualcomm Snapdragon 835, Qualcomm Snapdragon 845, Qualcomm Snapdragon 855, оснащенные портом USB 3.1 Type-C, но полный список девайсов, у которых есть функция вывода видео через USB-C, глянуть можно здесь);
  • переходник с USB 3.1 Type-C на HDMI;
  • монитор/телевизор с HDMI-входом;
  • Bluetooth-мышь и клавиатура.

Если всё перечисленное — в наличии, то далее:

  • открываем раздел «Для разработчиков» в настройках смартфона;
  • скроллим экран «Для разработчиков» до раздела «Приложения» и там активируем опции «Разрешить создание окон произвольной формы» («Enable freeform windows») и «Принудительное включение режима рабочего стола» («Force desktop mode»):

  • перезагружаем смартфон;
  • после этого качаем и устанавливаем кастомизированную версию приложение Lawnchair со страницы проекта на GitHub (ЛИНК на APK-файл);
  • после завершения установки тапаем «Настройки» -> «Приложения и уведомления» -> «Приложения по умолчанию» и устанавливаем Lawnchair в качестве главного приложения (лаунчера по умолчанию);
  • подключаем смартфон к монитору или телевизору через переходник;
  • даем приложению необходимые разрешения (отображать поверх всех окон и т.д.) и, собственно, тестируем Режим рабочего стола на большом экране.
Читайте также:  Roblox editor для андроид

С виду, конечно, экспериментальный десктопный режим Android 10 выглядит не так красиво, как Samsung DeX или Huawei Easy Projection, но зато работает. К примеру, та же многозадачность операционки на большом экране наконец-то обретает более-менее вменяемый вид (и наводит-таки на мысли, что ноут скоро вообще не нужен будет). Ну и будем надеяться, что в Google десктопный режим «допилят» и включаться он будет нормально…

Источник

Русские Блоги

Многооконная реализация Android

Отключить APK разделенный экран-AndroidManifest.xml добавить атрибут: android: resizeableActivity = «false»

Метки:Android NMulti-окноВ прошломAndroidВ системе все действия выполняются в полноэкранном режиме. Если вы не установите эффект прозрачности, вы можете одновременно видеть только один интерфейс действий.

Но начиная с версии Android N (7.0), система поддерживает многооконный режим. Благодаря поддержке нескольких окон пользователи могут одновременно открывать и видеть интерфейс нескольких приложений. И система также поддерживает перетаскивание между несколькими приложениями. Эта функция очень полезна на устройствах с большим экраном.

В этой статье подробно объясняется реализация многооконной функции в системе Android.

Введение в многооконные функции

очертание

В Android появилась многооконная функция от Android N (7.0).

Для новых функций Android N, пожалуйста, смотрите здесь:Android 7.0 for Developers
Подробные инструкции по работе с несколькими окнами см. здесь:Multi-Window Support

Многооконный режим на Android N имеет три режима:

Режим разделенного экрана
Этот режим можно использовать на мобильных телефонах. Этот режим разделяет экран на две части и отображает интерфейс двух приложений одновременно. Как показано ниже:

2. Режим PIP
Этот режим в основном используется на телевизоре. В этом режиме окно воспроизведения видео всегда может отображаться на верхнем слое. Как показано ниже:

3. Режим свободной формы
Этот режим похож на наш обычный рабочий столОперационная системаОкно интерфейса приложения можно свободно перетаскивать и изменять его размер. Как показано ниже:

Жизненный цикл

Многооконный режим не влияет и не меняет жизненный цикл исходного действия.

В многооконном режиме несколько действий могут быть видны одновременно, но только одно действие является самым верхним, то есть действие, которое получает фокус.

Все остальные действия будут в состоянии «Приостановлено» (хотя они видны).
В следующих трех сценариях система уведомит приложение об изменении статуса и может обработать приложение:

  • Когда пользователь запускает приложение в многооконном режиме
  • Когда пользователь меняет размер окна действия
  • Когда пользователь меняет окно приложения из многооконного режима в полноэкранный режим

Как приложение обрабатывает изменения состояния, смотрите здесь:Handling Runtime ChangesЯ не буду повторять их здесь.

Связанный с разработчиком

Начиная с API уровня 24, Android предоставляет следующие механизмы для поддержки использования многооконных функций.

  • Манифест нового атрибута
    • android:resizeableActivity=[«true» | «false»]
  • Добавлен макет атрибута
    • android:defaultWidth,android:defaultHeight Ширина и высота по умолчанию в режиме произвольной формы
    • android:gravity Начальная гравитация в режиме произвольной формы
    • android:minWidth, android:minHeight Минимальная высота и ширина в разделенном экране и режиме произвольной формы

Вот пример кода:

  • Добавлен API
    • Activity.isInMultiWindowMode() Запрос, если это в многооконном режиме
    • Activity.isInPictureInPictureMode() Запросить, находится ли он в режиме «картинка в картинке»
    • Activity.onMultiWindowModeChanged() Уведомлять об изменении многооконного режима (вход или выход из многооконного режима)
    • Activity.onPictureInPictureModeChanged() Уведомлять об изменении режима «картинка в картинке» (вход или выход из режима «картинка в картинке»)
    • Activity.enterPictureInPictureMode() Вызовите этот интерфейс для входа в режим «картинка в картинке». Если система не поддерживает этот вызов, этот вызов является недействительным.
    • ActivityOptions.setLaunchBounds() Когда система уже находится в режиме произвольной формы, вы можете использовать этот параметр для управления размером вновь запускаемой операции. Если система не поддерживает этот вызов, этот вызов недействителен

    Перед перетаскиванием Android N система позволяет перетаскивать только в пределах действия. Но начиная с Android N, система поддерживает перетаскивание между несколькими действиями. Вот некоторые связанные API. Смотрите официальную документацию для конкретных инструкций.

    • DragAndDropPermissions
    • View.startDragAndDrop()
    • View.cancelDragAndDrop()
    • View.updateDragShadow()
    • Activity.requestDragAndDropPermissions()

    Связанные модули и основные классы

    В этой статье мы в основном сосредоточены на реализации многооконных функций. Основные классы и модули для реализации многооконных функций перечислены здесь.

    Путь к коду здесь относится к исходному пути AOSP. Чтобы узнать, как получить исходный код AOSP, смотрите здесь:Downloading the Source。

    Путь к коду: / frameworks / base / services / core /Java/com/android/server/am

    Путь к коду: / frameworks / base / services / core / java / com / android / server / wm

    Путь к коду: frameworks / base / core / java /

    Путь к коду: / frameworks / base / packages / SystemUI /

    Как следует из названия: Системный интерфейс, сюда входят: NavigationBar, StatusBar, Keyguard и т. Д.

    Для объяснения, классы, упомянутые здесь, будут использоваться непосредственно ниже. Если вы хотите увидеть исходный код для этих классов, посмотрите путь здесь.

    Реализация многооконной функции

    Реализация многооконной функции в основном зависит от двух системных служб ActivityManagerService и WindowManagerService, которые расположены в процессе system_server. Этот процесс является очень важным системным процессом в системе Android. Многие сервисы в рамках находятся в этом процессе.

    Весь AndroidархитектураЯвляется ли модель CS, приложением является Клиент, а процессом system_server является соответствующий Сервер.

    Многие API, вызываемые приложением, будут отправлены для обработки соответствующей системной службе в процессе system_server. Например, API-интерфейс startActivity в конечном итоге обрабатывается ActivityManagerService.

    Поскольку прикладная программа и system_server выполняются в отдельных процессах, запросы на системные службы должны выполнять межпроцессное взаимодействие (IPC) через Binder для завершения вызова и возврата результата вызова.

    Введение в два системных сервиса

    ActivityManagerService отвечает за управление деятельностью.

    Для каждого действия, созданного в приложении, в ActivityManagerService будет соответствующая ему ActivityRecord, этот ActivityRecord записывает состояние действия в приложении. ActivityManagerService будет использовать этот ActivityRecord в качестве идентификатора для планирования процессов Activity в приложении, таких как управление жизненным циклом.

    На самом деле ответственность ActivityManagerService выходит далеко за рамки его названия: ActivityManagerService отвечает за управление всеми четырьмя основными компонентами (Activity, Service, BroadcastReceiver, ContentProvider) и управление процессами приложения.

    WindowManagerService отвечает за управление окнами. В том числе:

    Подождите. Каждое действие будет иметь свое собственное окно, и в WindowManagerService будет соответствующий WindowState. WindowManagerService использует это для идентификации окон в приложении и использует это WindowState для хранения, запроса и управления состоянием окна.

    ActivityManagerService и WindowManagerService должны работать в тесном сотрудничестве, поскольку создание или уничтожение Activity включает создание и уничтожение объектов Actiivty и объектов окна. Эти два независимы и тесно связаны.

    Процесс запуска деятельности

    Процесс запуска действия в основном включает в себя следующие этапы:

    Данная статья не предназначена для подробного объяснения процесса запуска Activity, читателям, интересующимся этой частью контента, обращайтесь к другим материалам.

    Задача и стек

    Каждое действие в системе Android находится в задании. Задача может содержать несколько действий, и может быть несколько экземпляров одного и того же действия. В AndroidManifest.xml мы можем передатьandroid:launchModeДля управления экземпляром Activity в Task.

    Кроме того, в startActivity мы также можем передатьsetFlagДля управления экземпляром запущенного Действия в Задаче.

    Важность управления задачами также заключается в недавнем списке задач и заднем стеке. Когда вы вызываете многозадачность с помощью клавиши многозадачности (нажмите и удерживайте клавишу Home на некоторых устройствах и клавишу многозадачности на некоторых устройствах), вы фактически получаете список недавно запущенных задач из ActivityManagerService.

    Стек Back управляет логикой, к которой должен переходить Activity, когда вы нажимаете кнопку Back в Activity. Стеки заданий и задних уровней см. Здесь:Tasks and Back Stack。

    Фактически, во внутреннем управлении ActivityManagerService и WindowManagerService в дополнение к Task есть слой контейнера, который разработчик и пользователь приложения контейнера может не почувствовать или использовать, но это очень важно, то есть Stack. Далее мы увидим, что многооконное управление в системе Android построено на стеке.Структура данныхНа. Стек содержит несколько задач, а задача содержит несколько действий (окно). На следующем рисунке показано их отношение:

    Следует также отметить, что структуры Task и Stack в ActivityManagerService и WindowManagerService имеют взаимно-однозначное соответствие, и соответствующее отношение выглядит следующим образом:

    То есть каждый ActivityStack или TaskRecord в ActivityManagerService имеет соответствующий TaskStack и Task в WindowManagerService. Оба типа объектов имеют уникальные идентификаторы (id имеет тип int), и они связаны по id.

    Многооконный и Стек

    Люди, которые использовали macOS или Ubuntu, должны были использовать функцию виртуального рабочего стола, как показано на следующем рисунке:

    Здесь создается несколько «виртуальных рабочих столов», и они перечислены вверху. Каждый виртуальный рабочий стол может иметь одно или несколько окон приложений, и виртуальный рабочий стол можно переключать в целом.

    Чтобы поддерживать несколько окон, Android создает несколько стеков во время выполнения, и здесь стек похож на роль виртуального рабочего стола.

    Каждый стек будет иметь уникальный идентификатор. Эти идентификаторы стека определены в ActivityManager.java:

    /** First static stack ID. */

    public static final int FIRST_STATIC_STACK_ID = 0;

    /** Home activity stack ID. */

    public static final int HOME_STACK_ID = FIRST_STATIC_STACK_ID;

    /** ID of stack where fullscreen activities are normally launched into. */

    public static final int FULLSCREEN_WORKSPACE_STACK_ID = 1;

    /** ID of stack where freeform/resized activities are normally launched into. */

    public static final int FREEFORM_WORKSPACE_STACK_ID = FULLSCREEN_WORKSPACE_STACK_ID + 1;

    /** ID of stack that occupies a dedicated region of the screen. */

    public static final int DOCKED_STACK_ID = FREEFORM_WORKSPACE_STACK_ID + 1;

    /** ID of stack that always on top (always visible) when it exist. */

    public static final int PINNED_STACK_ID = DOCKED_STACK_ID + 1;

    Из этого мы можем знать, что система может содержать так много стеков:

    Следует отметить, что не все эти стеки создаются сразу после запуска системы. Он создается при необходимости. Как уже упоминалось выше, ActivityStackSupervisor отвечает за управление ActivityStack.

    С учетом вышеизложенных базовых знаний давайте подробнее рассмотрим три многооконных режима в системе Android.

    Режим разделенного экрана

    На телефонах Nexus 6P запуск и выход из режима разделенного экрана — длительное нажатие многозадачной виртуальной кнопки. На следующем рисунке показано, как запустить режим разделенного экрана на Nexus 6P:

    После активации режима разделенного экрана экран разделяется на две части. Открытое в данный момент приложение перемещается в верхнюю часть экрана (в левую сторону, если оно находится в горизонтальной ориентации), а все остальные открытые приложения перечислены ниже (если оно в горизонтальной ориентации, оно находится справа) в многозадачной форме.

    После этого, когда пользователь работает, нижняя половина экрана сохраняет исходный режим использования: вы можете запускать или выходить из приложения, вы можете переключаться после многозадачности, а приложение в верхней части остается неизменным. Как мы упоминали ранее, на самом деле приложение, которое зафиксировано в первой половине экрана, находится в Docked Stack (Id — 3), а нижняя половина экрана — предыдущий полноэкранный Stack, размер которого был изменен (Id — 1).

    Далее, давайте проследим за долгим нажатием кнопки многозадачности в качестве подсказки, чтобы выяснить, как активируется режим разделенного экрана: на самом деле, и NavigationBar (три виртуальные кнопки внизу экрана), и StatusBar (строка состояния вверху экрана) оба Это в SystemUI. Мы можем использовать это как вход для расследования.

    PhoneStatusBar#prepareNavigationBarView Пользовательский интерфейс инициализируется для NavigationBar. Также установите прослушиватели событий для кнопок здесь. Вот длинные слушатели событий нажатия для кнопок недавних задач, которые нас интересуют:

    Источник

    Читайте также:  Установить спящий режим для андроид
Оцените статью