- Android ConstraintLayout — поместите один вид поверх другого
- 7 ответов
- Android-приложение поверх других приложений
- FrameLayout
- Поочередная смена картинки
- Обнаружены наложения Android
- Причина ошибки «Обнаружены наложения»
- Как исправить «Обнаружены наложения» на Android
- Как отключить наложения на Samsung Galaxy
- Какие приложения могут вызывать появление сообщений о наложениях
- Как сделать RelativeLayout поверх другого?
Android ConstraintLayout — поместите один вид поверх другого
Я пытаюсь добавить ProgressBar поверх Button (оба находятся внутри ConstraintLayout ).
Но даже после вызова bringToFront на ProgressBar в onCreate он всегда остается за Button .
7 ответов
Установите высоту ProgressBar ; 2dp , кажется, работает.
Вы также можете попробовать установить translationZ , как указано в принятом ответе на аналогичный вопрос.
Я также наткнулся на этот ответ в качестве альтернативы.
По умолчанию для кнопки установлен TranslationZ, поэтому у вас есть два варианта
1 — сделать индикатор выполнения TranslationZ больше, чем высота кнопки
2 — установите для кнопки TranslateZ значение 0, чтобы представления отображались друг над другом в определенном порядке в вашем макете ограничений, вы можете добиться этого, установив стиль на кнопку
Обновленный ответ для Android Studio 3.5:
В обновленном редакторе макетов теперь намного проще выбирать, какой вид будет впереди, как показано в заметках о выпуске Android Studio.
.. Кроме того, синее наложение теперь выделяет цель ограничения. Это выделение особенно полезно при попытке ограничить компонент, который перекрывается с другим.
Еще проще: если вы перетащите вид вверх (скопируйте или вставьте из дерева компонентов в редакторе макета), он получит более низкий приоритет (так что он будет позади других видов)
Вы можете обернуть его, как показано ниже. Используйте framelayout в качестве родительского элемента и поместите индикатор выполнения вне макета ограничения. Это будет перекрывать кнопку
В большинстве случаев вы можете просто определить вид, который вы хотите сверху, после того, который должен появиться под ним.
Нам нужно использовать Android: высота, чтобы контролировать это.
Этот атрибут высоты работает только на уровне API> = 21. Но ниже он будет вести себя нормально. Если мы добавим Progress под представлением Button, оно покажет представление, которое находится внизу вверху другого представления.
Источник
Android-приложение поверх других приложений
В 2013-году Facebook выпустил функцию Chat Heads для своего мессенджера, который позволяет вести переписку, не открывая сам мессенджер путем нажатия на маленькое круглое окошко, которое всегда висит на дисплее даже поверх других приложений:
Facebook одним из первых продемонстрировал реализацию «Drawing over other apps». Данную возможность разработчики сейчас используют в различных типах приложений — от боковых смарт-меню до записи экрана. В этой статье, хочу продеменстрировать процесс написания приложения-поверх-других-приложений на примере «анти-шпионской» программы Khameleon.
Для начала обозначу цели приложения, который будет реализован как пример приложения-поверх-других-приложений. Допустим нужно, чтобы рядом стоящие люди не могли с легкостью видеть контент моего смарфтона, пока я им пользуюсь. То есть необходима возможность:
- Скрывать часть дисплея, чтобы видеть только необходимую область
- Вместо скрытой области, показывать любой желаемый контент (например заданную веб страницу)
Примерно это может выглядеть так:
С функционалом приложения определились — теперь приступим к самому туториалу. Для написания приложения-поверх-других-приложений есть две самых главных составляющих:
- Service, через который ведется основной контроль и логика приложения
- Layout, который собственно и является GUI
Перед тем как реализовывать эти два компонента, необходимо получить разрешение для приложения-поверх-других-приложений. Для этого в AndroidManifest.xml необходимо добавить:
А для API > 23, т.е. Android M, нужно запросить разрешение в главном Activity:
После того как разрешение получено, укажем Layout, который нужно отобразвить на экране (многие элементы убраны для демонстрации):
В корневой RelativeLayout (по вашему усмотрению) можно поместить любые View’шки как обычно. View с нам нужен для того, чтобы показать как динамично менять размеры Layout. То есть через эту View’шку можно будет расстягивать и сжимать корневой RelativeLayout.
Как только у нас есть минимальный Layout, необходимо реализовать самый обычный Service. Единственная особенность сервиса в добавлении ранее созданного Layout:
На данном этапе наш Layout успешно отображается поверх других приложении. Теперь рассмотрим как можно динамично менять размеры нашего Layout:
Если потянуть за край Layout вверх или вниз, его высота соответственно сжимается и расширяется.
Мы рассмотрели минимальные необходимые шаги для написания приложения-поверх-других-приложений. Полный код для приложенения Khameleon, продемонстрированный выше, можно найти здесь.
Источник
FrameLayout
FrameLayout является самым простым типом разметки. Обычно это пустое пространство на экране, которое можно заполнить только дочерними объектами View или ViewGroup. Все дочерние элементы FrameLayout прикрепляются к верхнему левому углу экрана.
В разметке FrameLayout нельзя определить различное местоположение для дочернего объекта. Последующие дочерние объекты View будут просто рисоваться поверх предыдущих компонентов, частично или полностью затеняя их, если находящийся сверху объект непрозрачен, поэтому единственный дочерний элемент для FrameLayout обычно растянут до размеров родительского контейнера и имеет атрибуты:
Также можно использовать свойства Gravity для управления порядком размещения.
FrameLayout можно использовать для интересного эффекта, когда верхняя часть (TextView) остаётся неизменной, а основной контент прокручивается.
Поочередная смена картинки
Создадим разметку, когда на экран динамически выводится только одно изображение.
Теперь код для активности, где при нажатии на изображении, оно будет заменяться на другое.
В разметке мы указали, что один из компонентов ImageView должен быть невидимым. Если бы мы этого не сделали, то увидели, что компоненты просто накладываются друг на друга в стопку. И если элементы разных размеров, то можно увидеть, как одно изображение частично перекрывает другое.
Имейте в виду, что размер компоновки FrameLayout определяется наибольшим элементом в контейнере. Поэтому более маленькое изображение может растянуться.
Если часть элементов сверху стопки являются невидимыми, то могут наблюдаться проблемы с выводом на экран. В этих случаях рекомендуется вызывать метод setMeasureAllChildren() с аргументом true (аналог метода — атрибут android:measureAllChildren=»true»).
Источник
Обнаружены наложения Android
Начиная с Android 6.0 Marshmallow владельцы телефонов и планшетов стали сталкиваться с ошибкой «Обнаружены наложения», сообщением о том, что для того чтобы предоставить или отменить разрешение, сначала отключите наложения и кнопкой «Открыть настройки». Ошибка может возникать на Android 6, 7, 8 и 9, часто встречается на устройствах Samsung, LG, Nexus и Pixel (но может возникнуть и на других смартфонах и планшетах с указанными версиями системы).
В этой инструкции — подробно о том, чем вызвана ошибка Обнаружены наложения, как исправить ситуацию на вашем Android устройстве, а также о популярных приложениях, включенные наложения которых могут вызывать появление ошибки.
Причина ошибки «Обнаружены наложения»
Появление сообщения о том, что обнаружены наложения инициируется системой Android и это не совсем ошибка, а предупреждение, имеющее отношение к безопасности.
В процессе происходит следующее:
- Какое-то запускаемое вами или устанавливаемое приложение запрашивает разрешения (в этот момент должен появляться стандартный диалог Android, запрашивающий разрешение).
- Система определяет, что в текущий момент на Android используются наложения — т.е. какое-то другое (не то, которое запрашивает разрешения) приложение может выводить изображение поверх всего на экране. С точки зрения безопасности (по мнению Android) это плохо (например, такое приложение может подменить стандартный диалог из п.1 и ввести вас в заблуждение).
- Чтобы избежать угроз, вам предлагают сначала отключить наложения для приложения, которые их использует, а уже после этого давать разрешения, которые запрашивает новое приложение.
Надеюсь, хотя бы в какой-то степени происходящее стало понятным. Теперь о том, как отключить наложения на Android.
Как исправить «Обнаружены наложения» на Android
Для исправления ошибки потребуется отключить разрешение наложений для того приложения, которое вызывает проблему. При этом проблемное приложение — не то, которое вы запускаете перед появлением сообщения «Обнаружены наложения», а то, которое уже было установлено до него (это важно).
Примечание: на разных устройствах (особенно с модифицированными версиями Android) необходимый пункт меню может называться слегка по-разному, но всегда находится где-то в «Дополнительных» настройках приложений и называется примерно одинаково, ниже будет приведены примеры для нескольких распространенных версий и марок смартфонов.
В сообщении о проблеме вам сразу предложат перейти в настройки наложений. Также это можно сделать вручную:
- На «чистом» Android зайдите в Настройки — Приложения, нажмите по значку шестеренки в верхнем правом углу и выберите пункт «Наложение поверх других окон» (может также скрываться в разделе «Специальный доступ», в последних версиях Android — требуется открыть пункт наподобие «Дополнительные параметры приложений»). На телефонах LG — Настройки — Приложения — Кнопка меню справа вверху — «Настроить приложения» и выбрать пункт «Наложение поверх других приложений». Также далее отдельно будет показано, где нужный пункт находится на Samsung Galaxy с Oreo или Android 9 Pie.
- Отключите разрешение наложений для приложений, которые могут вызывать проблему (о них далее в статье), а в идеале — для всех сторонних приложений (т.е. тех, которые вы устанавливали самостоятельно, особенно в последнее время). Если вверху списка у вас в меню отображается пункт «Активные», переключите на «Авторизованные» (не обязательно, но так будет удобнее) и отключите наложения для сторонних приложений (тех, которые не были предустановлены на телефоне или планшете).
- Снова запустите приложение, после запуска которого появилось окно с сообщением о том, что были обнаружены наложения.
Если после этого ошибка не повторилась и вам удалось предоставить необходимые разрешения приложению, можно снова включить наложения в том же меню — часто это необходимое условие работы некоторых полезных приложений.
Как отключить наложения на Samsung Galaxy
На смартфонах Samsung Galaxy наложения можно отключить, используя следующий путь:
- Зайдите в Настройки — Приложения, нажмите по кнопке меню вверху справа и выберите пункт «Особые права доступа».
- В следующем окне выберите «Поверх других приложений» и отключите наложения для недавно установленных приложений. В Android 9 Pie этот пункт называется «Всегда сверху».
Если вы не знаете, для каких приложений следует отключать наложения, можете сделать это для всего списка, а затем, когда проблема с установкой будет решена, вернуть параметры в исходное положение.
Какие приложения могут вызывать появление сообщений о наложениях
В приведенном решении из пункта 2 может быть не ясным, для каких именно приложений отключать наложения. Прежде всего — не для системных (т.е. включенные наложения для приложений Google и производителя телефона обычно не вызывают проблемы, но по последнему пункту — это не всегда так, например, дополнения лаунчера на Sony Xperia могут быть причиной).
Проблему «Обнаружены наложения» вызывают те Android приложения, которые выводят что-то поверх экрана (дополнительные элементы интерфейса, изменяют цвет и т.п.) и делают это не в размещаемых вами вручную виджетах. Наиболее часто это бывают следующие утилиты:
- Средства для изменения цветовой температуры и яркости экрана — Twilight, Lux Lite, f.lux и другие.
- Drupe, а возможно и другие расширения возможностей телефона (номеронабирателя) на Android.
- Некоторые утилиты для контроля за разрядом батареи и отображения ее статуса, выводящие информацию описанным выше образом.
- Разного рода «чистильщики» памяти на Android, часто сообщают о возможности Clean Master вызывать рассматриваемую ситуацию.
- Приложения для блокировки и родительского контроля (выводящие запрос пароля и т.п. поверх запускаемых приложений), например, CM Locker, CM Security.
- Сторонние экранные клавиатуры.
- Мессенджеры, выводящие диалоги поверх других приложений (например, мессенджер Facebook).
- Некоторые лаунчеры и утилиты быстрого запуска приложений из нестандартных меню (сбоку и подобные).
- Некоторые отзывы говорят о том, что проблему может вызывать File Manager HD.
В большинстве случаев, проблема достаточно просто решается, если получится определить мешающее приложение. При этом, возможно потребуется выполнять описываемые действия всякий раз, когда новое приложение будет запрашивать разрешения.
Если же предлагаемые варианты не помогают, есть еще один вариант — зайти в безопасный режим Android (в нем любые наложения будут отключены), затем в Параметры — Приложение выбрать приложение, которое не запускается и вручную включить все требуемые разрешения для него в соответствующем разделе. После этого перезагрузить телефон в обычном режиме. Подробнее — Безопасный режим на Android.
Источник
Как сделать RelativeLayout поверх другого?
Есть основной фрагмент:
Он содержит два основных элемента
это карта и RelativeLayout. Последний элемент мы скрываем.
Так овт при перемещении карты или клику по элементу карты, мне надо чтобы RelativeLayout (company_details).
Собственно я этого добился:
Как сделать один инпут поверх другого
Есть два инпута, один текстовый, второй сабмит с фоном картинки, нужно сделать чтобы сабмит был.
Как разместить изображение из Label поверх другого изображения?
а у меня возник вопрос! как разместить изображение из Label поверх другого изображения? мне нужно.
Как поставить какой-либо объект поверх другого?
вопрос Н1 есть ли аналоги действия refresh такие, чтобы экран не мерцал(при движении строки) .
Как расположить два фона один поверх другого?
Здравствуйте! Решаю задание на курсах по CSS. Никак не могу решить. Есть какое-то правило, каким.
Как реализовать (настроить) отображение какого либо рисунка поверх другого
Как реализовать (настроить) отображение какого либо рисунка поверх другого? В VB автоматически.
Сделать RelativeLayout во весь экран устройства
У меня есть разметка активити activity_main.xml .
Как отобразить кнопку поверх остальных элементов или поверх tabPage или поверх tabControl?
Как отобразить кнопку поверх остальных элементов или поверх tabPage или поверх tabControl? .
Источник