В Android 12 доступны публичные API для реализации эффектов размытия окна, таких как размытие фона и размытие сзади.
Размытие окон или перекрестное размытие окон используется для размытия экрана за данным окном. Существует два типа размытия окон, которые можно использовать для достижения различных визуальных эффектов:
Размытие фона позволяет создавать окна с размытым фоном, создавая эффект матового стекла.
Размытие сзади позволяет размыть весь экран позади (диалогового) окна, создавая эффект глубины резкости.
Эти два эффекта можно использовать по отдельности или вместе, как показано на следующем рисунке:
![]() а | ![]() б | ![]() с |
Рисунок 1. Размытие только заднего плана (a), размытие только заднего плана (b), размытие заднего плана и заднего плана (c)
Функция размытия окна работает во всех окнах, то есть она работает и тогда, когда за окном находится другое приложение. Этот эффект не такой же, как эффект размытия рендеринга , который размывает содержимое внутри того же окна. Размытие окна полезно для диалогов, нижних листов и других плавающих окон.
Выполнение
Разработчики приложений
Разработчики приложений должны указать радиус размытия для создания эффекта размытия. Радиус размытия управляет плотностью размытия, то есть чем больше радиус, тем плотнее размытие. Размытие 0 пикселей означает отсутствие размытия. Для размытия сзади радиус 20 пикселей создает хороший эффект глубины резкости, в то время как радиус размытия фона 80 пикселей создает хороший эффект матового стекла. Избегайте радиусов размытия выше 150 пикселей, так как это существенно повлияет на производительность.
Чтобы добиться желаемого эффекта размытия и повысить читаемость, выберите значение радиуса размытия, дополненное полупрозрачным слоем цвета.
Размытие фона
Используйте размытие фона на плавающих окнах, чтобы создать эффект фона окна, представляющий собой размытое изображение основного содержимого. Чтобы добавить размытый фон для вашего окна, выполните следующие действия:
Вызовите Window#setBackgroundBlurRadius(int) для установки радиуса размытия фона. Или, в теме окна, установите R.attr.windowBackgroundBlurRadius .
Установите R.attr.windowIsTranslucent на true, чтобы сделать окно полупрозрачным. Размытие рисуется под поверхностью окна, поэтому окно должно быть полупрозрачным, чтобы размытие было видно.
При желании вызовите Window#setBackgroundDrawableResource(int) для добавления прямоугольного фона окна, рисуемого полупрозрачным цветом. Или в теме окна установите R.attr.windowBackground .
Для окна со скругленными углами определите скругленные углы для размытой области, установив ShapeDrawable со скругленными углами в качестве отрисовываемого фона окна.
Обработка включенных и выключенных состояний размытия. Более подробную информацию см. в разделе «Руководство по использованию размытия окна в приложениях» .
Размытие позади
Размытие сзади размывает весь экран за окном. Этот эффект используется для направления внимания пользователя на содержимое окна путем размывания всего, что находится на экране за окном.
Чтобы размыть содержимое за окном, выполните следующие действия:
Добавьте
FLAG_BLUR_BEHIND
к флагам окна, чтобы включить размытие сзади. Или в теме окна установите R.attr.windowBlurBehindEnabled .Вызовите
WindowManager.LayoutParams#setBlurBehindRadius
для установки размытия за радиусом. Или, в теме окна, установите R.attr.windowBlurBehindRadius .При желании можно выбрать дополнительную величину затемнения .
Обработка включенных и выключенных состояний размытия. Более подробную информацию см. в разделе «Руководство по использованию размытия окна в приложениях» .
Рекомендации по использованию размытия окон в приложениях
Поддержка размытия окон зависит от следующего:
Версия Android: API размытия окон доступны только на Android 12 и выше. Проверьте SDK устройства для версии Android.
Производительность графики: устройства с менее производительными графическими процессорами могут не поддерживать размытие окон.
Состояние системы: Системный сервер может временно отключить размытие окон во время выполнения, например, в режиме экономии заряда батареи, при воспроизведении определенных видов видеоконтента или из-за изменения настроек разработчиком.
Чтобы сделать ваше приложение совместимым со всеми версиями Android, устройствами и состояниями системы, следуйте следующим рекомендациям:
Добавьте слушателя через WindowManager#addCrossWindowBlurEnabledListener , чтобы уведомлять вас, когда размытие окон включено или выключено. Кроме того, используйте
WindowManager#isCrossWindowBlurEnabled
для запроса того, включено ли размытие окон в данный момент.Реализуйте две версии фона окна, чтобы обеспечить возможность включения или выключения размытия окна.
Когда размытия включены, фон окна должен быть полупрозрачным, чтобы размытие было видно. В этом состоянии, когда размытия отключены, содержимое окна напрямую перекрывается содержимым основного окна, делая перекрывающееся окно менее читаемым. Чтобы избежать такого эффекта, когда размытия окон отключены, адаптируйте пользовательский интерфейс приложения следующим образом:
Для размытия фона увеличьте альфа-канал рисуемого фона окна, сделав его более непрозрачным.
Для размытия сзади добавьте затемненный слой с большей степенью затемнения.
Пример размытия сзади и размытия фона
В этом разделе представлен рабочий пример действия, в котором используется как размытие сзади, так и размытие фона.
Следующий пример MainActivity.java
— это диалог с радиусом размытия сзади 20 пикселей и радиусом размытия фона 80 пикселей. Он имеет скругленные углы, определенные в xml в отрисовываемом фоне окна. Он правильно обрабатывает различные версии Android, различные устройства (которые потенциально не поддерживают размытие окна) и изменения включенного или выключенного размытия во время выполнения. Он гарантирует, что содержимое диалога будет читаемым при любом из этих условий, регулируя альфа-канал отрисовываемого фона окна и величину затемнения окна.
public class MainActivity extends Activity {
private final int mBackgroundBlurRadius = 80;
private final int mBlurBehindRadius = 20;
// We set a different dim amount depending on whether window blur is enabled or disabled
private final float mDimAmountWithBlur = 0.1f;
private final float mDimAmountNoBlur = 0.4f;
// We set a different alpha depending on whether window blur is enabled or disabled
private final int mWindowBackgroundAlphaWithBlur = 170;
private final int mWindowBackgroundAlphaNoBlur = 255;
// Use a rectangular shape drawable for the window background. The outline of this drawable
// dictates the shape and rounded corners for the window background blur area.
private Drawable mWindowBackgroundDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWindowBackgroundDrawable = getDrawable(R.drawable.window_background);
getWindow().setBackgroundDrawable(mWindowBackgroundDrawable);
if (buildIsAtLeastS()) {
// Enable blur behind. This can also be done in xml with R.attr#windowBlurBehindEnabled
getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
// Register a listener to adjust window UI whenever window blurs are enabled/disabled
setupWindowBlurListener();
} else {
// Window blurs are not available prior to Android S
updateWindowForBlurs(false /* blursEnabled */);
}
// Enable dim. This can also be done in xml, see R.attr#backgroundDimEnabled
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
/**
* Set up a window blur listener.
*
* Window blurs might be disabled at runtime in response to user preferences or system states
* (e.g. battery saving mode). WindowManager#addCrossWindowBlurEnabledListener allows to
* listen for when that happens. In that callback we adjust the UI to account for the
* added/missing window blurs.
*
* For the window background blur we adjust the window background drawable alpha:
* - lower when window blurs are enabled to make the blur visible through the window
* background drawable
* - higher when window blurs are disabled to ensure that the window contents are readable
*
* For window blur behind we adjust the dim amount:
* - higher when window blurs are disabled - the dim creates a depth of field effect,
* bringing the user's attention to the dialog window
* - lower when window blurs are enabled - no need for a high alpha, the blur behind is
* enough to create a depth of field effect
*/
@RequiresApi(api = Build.VERSION_CODES.S)
private void setupWindowBlurListener() {
Consumer<Boolean> windowBlurEnabledListener = this::updateWindowForBlurs;
getWindow().getDecorView().addOnAttachStateChangeListener(
new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
getWindowManager().addCrossWindowBlurEnabledListener(
windowBlurEnabledListener);
}
@Override
public void onViewDetachedFromWindow(View v) {
getWindowManager().removeCrossWindowBlurEnabledListener(
windowBlurEnabledListener);
}
});
}
private void updateWindowForBlurs(boolean blursEnabled) {
mWindowBackgroundDrawable.setAlpha(blursEnabled && mBackgroundBlurRadius > 0 ?
mWindowBackgroundAlphaWithBlur : mWindowBackgroundAlphaNoBlur);
getWindow().setDimAmount(blursEnabled && mBlurBehindRadius > 0 ?
mDimAmountWithBlur : mDimAmountNoBlur);
if (buildIsAtLeastS()) {
// Set the window background blur and blur behind radii
getWindow().setBackgroundBlurRadius(mBackgroundBlurRadius);
getWindow().getAttributes().setBlurBehindRadius(mBlurBehindRadius);
getWindow().setAttributes(getWindow().getAttributes());
}
}
private static boolean buildIsAtLeastS() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
}
}
Чтобы создать закругленные углы для окна, мы определяем фон окна в res/drawable/window_background.xml
как ShapeDrawable со закругленными углами радиусом 20 dp следующим образом:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners android:radius="20dp"/>
<solid android:color="#AAAAAA"/>
</shape>
Размытие окна размывает содержимое окна под действием. Размытое изображение рисуется под этим окном действия, поэтому окно действия должно быть полупрозрачным, чтобы размытие было видно. Чтобы сделать окно полупрозрачным, мы устанавливаем R.attr.windowIsTranslucent в теме действия следующим образом:
<style name="Theme.BlurryDialog" parent="Theme.MaterialComponents.Dialog">
<item name="android:windowIsTranslucent">true</item>
</style>
OEM-производители и партнеры
Чтобы использовать функцию размытия окон на устройстве, OEM-производитель должен заявить, что устройство поддерживает эту функцию.
Чтобы проверить, поддерживает ли ваше устройство функцию размытия окон, выполните следующие действия:
Убедитесь, что устройство может справиться с дополнительной нагрузкой на GPU. Устройства начального уровня могут не справиться с дополнительной нагрузкой, что может привести к потере кадров. Включайте размытие окон только на проверенных устройствах с достаточной мощностью GPU.
Если у вас настроенный движок рендеринга, убедитесь, что ваш движок рендеринга реализует логику размытия. Движок рендеринга Android 12 по умолчанию реализует логику размытия в
BlurFilter.cpp
.
Убедившись, что ваше устройство поддерживает размытие окон, установите следующее sysprop
Surface Flinger:
PRODUCT_VENDOR_PROPERTIES += \
ro.surface_flinger.supports_background_blur=1
Проверка
Чтобы убедиться, что окно вашего приложения правильно обрабатывается при переключении между состояниями включенного и выключенного размытия, выполните следующие действия:
Откройте пользовательский интерфейс с размытием.
Включите или отключите размытие окон, включив или выключив размытие окон .
Убедитесь, что пользовательский интерфейс окна изменяется с размытого состояния на размытое и обратно, как и ожидалось.
Включить и выключить размытие окна
Чтобы проверить, как отображается пользовательский интерфейс окна с эффектом размытия окна, включите или отключите размытие одним из следующих способов:
Из опций разработчика:
Настройки -> Система -> Параметры разработчика -> Аппаратное ускорение рендеринга -> Разрешить размытие на уровне окна
С терминала на устройстве с root-доступом:
adb shell wm disable-blur 1 # 1 disables window blurs, 0 allows them
Чтобы проверить, поддерживает ли ваше устройство Android 12+ функцию размытия окон и включена ли она в данный момент, запустите adb shell wm disable-blur
на устройстве с правами root.
Поиск неисправностей
Используйте следующую информацию в качестве руководства по устранению неполадок во время проверки.
Размытие не прорисовано
Убедитесь, что размытия в данный момент включены и ваше оборудование их поддерживает. См. Включение и выключение размытия окна .
Убедитесь, что вы установили полупрозрачный цвет фона окна. Непрозрачный цвет фона окна скрывает размытую область.
Тестовое устройство не поддерживает размытие окон
- Протестируйте свое приложение на эмуляторе Android 12. Чтобы настроить эмулятор Android, обратитесь к разделу Настройка эмулятора Android . Любое виртуальное устройство Android, созданное с помощью эмулятора, поддерживает размытие окон.
Нет закругленных углов
- Установите фон окна drawable для определения скругленных углов. Этот drawable определяет контур размытой области.
Обновление параметра разработчика не включает размытие
- Проверьте, находится ли устройство в режиме экономии заряда батареи или использует ли оно туннелирование мультимедиа . На некоторых ТВ-устройствах размытие окон также может быть отключено во время воспроизведения видео.
Размытие фона на весь экран, не в пределах границ окна
Проверьте android:windowIsFloating , чтобы убедиться, что ваше окно отмечено как плавающее.
Убедитесь, что установлен фон окна drawable . Этот параметр определяет контур области размытия.
Обновления от слушателя не применяются к экрану.
- Обновления слушателя могут применяться к старому экземпляру окна. Проверьте, уничтожается ли окно и создается ли оно заново с правильным обновлением слушателя.
В Android 12 доступны публичные API для реализации эффектов размытия окна, таких как размытие фона и размытие сзади.
Размытие окон или перекрестное размытие окон используется для размытия экрана за данным окном. Существует два типа размытия окон, которые можно использовать для достижения различных визуальных эффектов:
Размытие фона позволяет создавать окна с размытым фоном, создавая эффект матового стекла.
Размытие сзади позволяет размыть весь экран позади (диалогового) окна, создавая эффект глубины резкости.
Эти два эффекта можно использовать по отдельности или вместе, как показано на следующем рисунке:
![]() а | ![]() б | ![]() с |
Рисунок 1. Размытие только заднего плана (a), размытие только заднего плана (b), размытие заднего плана и заднего плана (c)
Функция размытия окна работает во всех окнах, то есть она работает и тогда, когда за окном находится другое приложение. Этот эффект не такой же, как эффект размытия рендеринга , который размывает содержимое внутри того же окна. Размытие окна полезно для диалогов, нижних листов и других плавающих окон.
Выполнение
Разработчики приложений
Разработчики приложений должны указать радиус размытия для создания эффекта размытия. Радиус размытия управляет плотностью размытия, то есть чем больше радиус, тем плотнее размытие. Размытие 0 пикселей означает отсутствие размытия. Для размытия сзади радиус 20 пикселей создает хороший эффект глубины резкости, в то время как радиус размытия фона 80 пикселей создает хороший эффект матового стекла. Избегайте радиусов размытия выше 150 пикселей, так как это существенно повлияет на производительность.
Чтобы добиться желаемого эффекта размытия и повысить читаемость, выберите значение радиуса размытия, дополненное полупрозрачным слоем цвета.
Размытие фона
Используйте размытие фона на плавающих окнах, чтобы создать эффект фона окна, представляющий собой размытое изображение основного содержимого. Чтобы добавить размытый фон для вашего окна, выполните следующие действия:
Вызовите Window#setBackgroundBlurRadius(int) для установки радиуса размытия фона. Или, в теме окна, установите R.attr.windowBackgroundBlurRadius .
Установите R.attr.windowIsTranslucent на true, чтобы сделать окно полупрозрачным. Размытие рисуется под поверхностью окна, поэтому окно должно быть полупрозрачным, чтобы размытие было видно.
При желании вызовите Window#setBackgroundDrawableResource(int) для добавления прямоугольного фона окна, рисуемого полупрозрачным цветом. Или в теме окна установите R.attr.windowBackground .
Для окна со скругленными углами определите скругленные углы для размытой области, установив ShapeDrawable со скругленными углами в качестве отрисовываемого фона окна.
Обработка включенных и выключенных состояний размытия. Более подробную информацию см. в разделе «Руководство по использованию размытия окна в приложениях» .
Размытие позади
Размытие сзади размывает весь экран за окном. Этот эффект используется для направления внимания пользователя на содержимое окна путем размывания всего, что находится на экране за окном.
Чтобы размыть содержимое за окном, выполните следующие действия:
Добавьте
FLAG_BLUR_BEHIND
к флагам окна, чтобы включить размытие сзади. Или в теме окна установите R.attr.windowBlurBehindEnabled .Вызовите
WindowManager.LayoutParams#setBlurBehindRadius
для установки размытия за радиусом. Или, в теме окна, установите R.attr.windowBlurBehindRadius .При желании можно выбрать дополнительную величину затемнения .
Обработка включенных и выключенных состояний размытия. Более подробную информацию см. в разделе «Руководство по использованию размытия окна в приложениях» .
Рекомендации по использованию размытия окон в приложениях
Поддержка размытия окон зависит от следующего:
Версия Android: API размытия окон доступны только на Android 12 и выше. Проверьте SDK устройства для версии Android.
Производительность графики: устройства с менее производительными графическими процессорами могут не поддерживать размытие окон.
Состояние системы: Системный сервер может временно отключить размытие окон во время выполнения, например, в режиме экономии заряда батареи, при воспроизведении определенных видов видеоконтента или из-за изменения настроек разработчиком.
Чтобы сделать ваше приложение совместимым со всеми версиями Android, устройствами и состояниями системы, следуйте следующим рекомендациям:
Добавьте слушателя через WindowManager#addCrossWindowBlurEnabledListener , чтобы уведомлять вас, когда размытие окон включено или выключено. Кроме того, используйте
WindowManager#isCrossWindowBlurEnabled
для запроса того, включено ли размытие окон в данный момент.Реализуйте две версии фона окна, чтобы обеспечить возможность включения или выключения размытия окна.
Когда размытия включены, фон окна должен быть полупрозрачным, чтобы размытие было видно. В этом состоянии, когда размытия отключены, содержимое окна напрямую перекрывается содержимым основного окна, делая перекрывающееся окно менее читаемым. Чтобы избежать такого эффекта, когда размытия окон отключены, адаптируйте пользовательский интерфейс приложения следующим образом:
Для размытия фона увеличьте альфа-канал рисуемого фона окна, сделав его более непрозрачным.
Для размытия сзади добавьте затемненный слой с большей степенью затемнения.
Пример размытия сзади и размытия фона
В этом разделе представлен рабочий пример действия, в котором используется как размытие сзади, так и размытие фона.
Следующий пример MainActivity.java
— это диалог с радиусом размытия сзади 20 пикселей и радиусом размытия фона 80 пикселей. Он имеет скругленные углы, определенные в xml в отрисовываемом фоне окна. Он правильно обрабатывает различные версии Android, различные устройства (которые потенциально не поддерживают размытие окна) и изменения включенного или выключенного размытия во время выполнения. Он гарантирует, что содержимое диалога будет читаемым при любом из этих условий, регулируя альфа-канал отрисовываемого фона окна и величину затемнения окна.
public class MainActivity extends Activity {
private final int mBackgroundBlurRadius = 80;
private final int mBlurBehindRadius = 20;
// We set a different dim amount depending on whether window blur is enabled or disabled
private final float mDimAmountWithBlur = 0.1f;
private final float mDimAmountNoBlur = 0.4f;
// We set a different alpha depending on whether window blur is enabled or disabled
private final int mWindowBackgroundAlphaWithBlur = 170;
private final int mWindowBackgroundAlphaNoBlur = 255;
// Use a rectangular shape drawable for the window background. The outline of this drawable
// dictates the shape and rounded corners for the window background blur area.
private Drawable mWindowBackgroundDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWindowBackgroundDrawable = getDrawable(R.drawable.window_background);
getWindow().setBackgroundDrawable(mWindowBackgroundDrawable);
if (buildIsAtLeastS()) {
// Enable blur behind. This can also be done in xml with R.attr#windowBlurBehindEnabled
getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
// Register a listener to adjust window UI whenever window blurs are enabled/disabled
setupWindowBlurListener();
} else {
// Window blurs are not available prior to Android S
updateWindowForBlurs(false /* blursEnabled */);
}
// Enable dim. This can also be done in xml, see R.attr#backgroundDimEnabled
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
/**
* Set up a window blur listener.
*
* Window blurs might be disabled at runtime in response to user preferences or system states
* (e.g. battery saving mode). WindowManager#addCrossWindowBlurEnabledListener allows to
* listen for when that happens. In that callback we adjust the UI to account for the
* added/missing window blurs.
*
* For the window background blur we adjust the window background drawable alpha:
* - lower when window blurs are enabled to make the blur visible through the window
* background drawable
* - higher when window blurs are disabled to ensure that the window contents are readable
*
* For window blur behind we adjust the dim amount:
* - higher when window blurs are disabled - the dim creates a depth of field effect,
* bringing the user's attention to the dialog window
* - lower when window blurs are enabled - no need for a high alpha, the blur behind is
* enough to create a depth of field effect
*/
@RequiresApi(api = Build.VERSION_CODES.S)
private void setupWindowBlurListener() {
Consumer<Boolean> windowBlurEnabledListener = this::updateWindowForBlurs;
getWindow().getDecorView().addOnAttachStateChangeListener(
new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
getWindowManager().addCrossWindowBlurEnabledListener(
windowBlurEnabledListener);
}
@Override
public void onViewDetachedFromWindow(View v) {
getWindowManager().removeCrossWindowBlurEnabledListener(
windowBlurEnabledListener);
}
});
}
private void updateWindowForBlurs(boolean blursEnabled) {
mWindowBackgroundDrawable.setAlpha(blursEnabled && mBackgroundBlurRadius > 0 ?
mWindowBackgroundAlphaWithBlur : mWindowBackgroundAlphaNoBlur);
getWindow().setDimAmount(blursEnabled && mBlurBehindRadius > 0 ?
mDimAmountWithBlur : mDimAmountNoBlur);
if (buildIsAtLeastS()) {
// Set the window background blur and blur behind radii
getWindow().setBackgroundBlurRadius(mBackgroundBlurRadius);
getWindow().getAttributes().setBlurBehindRadius(mBlurBehindRadius);
getWindow().setAttributes(getWindow().getAttributes());
}
}
private static boolean buildIsAtLeastS() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
}
}
Чтобы создать закругленные углы для окна, мы определяем фон окна в res/drawable/window_background.xml
как ShapeDrawable со закругленными углами радиусом 20 dp следующим образом:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners android:radius="20dp"/>
<solid android:color="#AAAAAA"/>
</shape>
Размытие окна размывает содержимое окна под действием. Размытое изображение рисуется под этим окном действия, поэтому окно действия должно быть полупрозрачным, чтобы размытие было видно. Чтобы сделать окно полупрозрачным, мы устанавливаем R.attr.windowIsTranslucent в теме действия следующим образом:
<style name="Theme.BlurryDialog" parent="Theme.MaterialComponents.Dialog">
<item name="android:windowIsTranslucent">true</item>
</style>
OEM-производители и партнеры
Чтобы использовать функцию размытия окон на устройстве, OEM-производитель должен заявить, что устройство поддерживает эту функцию.
Чтобы проверить, поддерживает ли ваше устройство функцию размытия окон, выполните следующие действия:
Убедитесь, что устройство может справиться с дополнительной нагрузкой на GPU. Устройства начального уровня могут не справиться с дополнительной нагрузкой, что может привести к потере кадров. Включайте размытие окон только на проверенных устройствах с достаточной мощностью GPU.
Если у вас настроенный движок рендеринга, убедитесь, что ваш движок рендеринга реализует логику размытия. Движок рендеринга Android 12 по умолчанию реализует логику размытия в
BlurFilter.cpp
.
Убедившись, что ваше устройство поддерживает размытие окон, установите следующее sysprop
Surface Flinger:
PRODUCT_VENDOR_PROPERTIES += \
ro.surface_flinger.supports_background_blur=1
Проверка
Чтобы убедиться, что окно вашего приложения правильно обрабатывается при переключении между состояниями включенного и выключенного размытия, выполните следующие действия:
Откройте пользовательский интерфейс с размытием.
Включите или отключите размытие окон, включив или выключив размытие окон .
Убедитесь, что пользовательский интерфейс окна изменяется с размытого состояния на размытое и обратно, как и ожидалось.
Включить и выключить размытие окна
Чтобы проверить, как отображается пользовательский интерфейс окна с эффектом размытия окна, включите или отключите размытие одним из следующих способов:
Из опций разработчика:
Настройки -> Система -> Параметры разработчика -> Аппаратное ускорение рендеринга -> Разрешить размытие на уровне окна
С терминала на устройстве с root-доступом:
adb shell wm disable-blur 1 # 1 disables window blurs, 0 allows them
Чтобы проверить, поддерживает ли ваше устройство Android 12+ функцию размытия окон и включена ли она в данный момент, запустите adb shell wm disable-blur
на устройстве с правами root.
Поиск неисправностей
Используйте следующую информацию в качестве руководства по устранению неполадок во время проверки.
Размытие не прорисовано
Убедитесь, что размытия в данный момент включены и ваше оборудование их поддерживает. См. Включение и выключение размытия окна .
Убедитесь, что вы установили полупрозрачный цвет фона окна. Непрозрачный цвет фона окна скрывает размытую область.
Тестовое устройство не поддерживает размытие окон
- Протестируйте свое приложение на эмуляторе Android 12. Чтобы настроить эмулятор Android, обратитесь к разделу Настройка эмулятора Android . Любое виртуальное устройство Android, созданное с помощью эмулятора, поддерживает размытие окон.
Нет закругленных углов
- Установите фон окна drawable для определения скругленных углов. Этот drawable определяет контур размытой области.
Обновление параметра разработчика не включает размытие
- Проверьте, находится ли устройство в режиме экономии заряда батареи или использует ли оно туннелирование мультимедиа . На некоторых ТВ-устройствах размытие окон также может быть отключено во время воспроизведения видео.
Размытие фона на весь экран, не в пределах границ окна
Проверьте android:windowIsFloating , чтобы убедиться, что ваше окно отмечено как плавающее.
Убедитесь, что установлен фон окна drawable . Этот параметр определяет контур области размытия.
Обновления от слушателя не применяются к экрану.
- Обновления слушателя могут применяться к старому экземпляру окна. Проверьте, уничтожается ли окно и создается ли оно заново с правильным обновлением слушателя.