pregunta
Debido a las necesidades comerciales, la aplicación necesita configurar una interfaz inmersiva , pero al configurar la pantalla completa, el modo de configuración de pantalla completa tradicional para pantallas con formas especiales no será válido.
solución
**La versión de Android P proporciona parámetros layoutInDisplayCutoutMode
para configuraciones inmersivas. layoutInDisplayCutoutMode
**Varias configuraciones de atributos:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
: Solo cuando la muesca está completamente incluida en la barra del sistema , la ventana puede expandirse al área de la muesca. De lo contrario, la ventana se coloca de manera que no se superponga al área de la muesca.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
: Permite que la ventana se extienda hasta el área de explosión en el borde lateral corto.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
: No se permite que la ventana se extienda hasta el área de la muesca.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
: Permita que la ventana se extienda a todas las áreas de muesca del borde de la pantalla.
Seleccione shortEdges
el modo en el proyecto e ingrese el código directamente
public final class ImmersiveUtils {
private ImmersiveUtils() {
}
/**
* 设置沉浸式模式
*/
public static void setImmersiveMode(Activity activity) {
Window window = activity.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(lp);
} else {
window.requestFeature(Window.FEATURE_NO_TITLE);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
final View decorView = window.getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
Agregar método a Activity
métodoonCreate()
ImmersiveUtils.setImmersiveMode(this);
Reponer
Durante la prueba real, se descubrió que la página de inicio de algunos modelos de alta gama con pantallas de formas especiales todavía mostraba una barra de estado negra después de configurarse de la manera anterior (¡¡¡mágico!!!).
Solución: Configure el tema correspondiente
al mismo tiempo que establece el método y el problema estará resuelto, los detalles son los siguientes
<style name="AppTheme" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowFullscreen">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>