Interfaz inmersiva de configuración del dispositivo de pantalla con forma especial de Android

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 layoutInDisplayCutoutModepara 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 shortEdgesel 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>

Supongo que te gusta

Origin blog.csdn.net/qq_22255311/article/details/129669367
Recomendado
Clasificación