domingo, 16 de marzo de 2025

Solapamiento de la barra de estado en android 15

Con el cambio al SDK35, en mis aplicaciones se está produciendo un efecto inesperado que es el solapamiento de la barra de tareas con la pp en los dispositivos con Android 15

Esto es al parecer porque, por defecto, en Android 15, las aplicaciones se muestran a pantalla completa (EdgeToEdge) con los que, si no lo impedimos se produce este error.


La verdad es que google ya nos lo venía advirtiendo. desde hace un tiempo, cuando creaba una nueva Activity, se generaba el siguiente código:

package com.janubio.pruebas;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

    }
}

Yo eliminaba las instrucciones EdgeToEdgeViewCompat.setOnApplyWindowInsetsListener y me quedaba tan pancho, parecía que no afectaba en nada a la aplicación y eliminaba los imports correspondiente pero si lo haces, estas cayendo en el error que se produce con los dispositivos Android 15.

Solución alternativa

Buscando por internet encontré otra solución si no quería volver a añadir esas líneas de código en mis Activitys y es añadir la siguiente instrucción al xml de dichas Activitys:

android:fitsSystemWindows="true"

Por ejemplo, la activity.xml quedaría de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorFondoPantalla"
    android:fitsSystemWindows="true"
    tools:context=".AboutActivity2">
....
</RelativeLayout>

En principio esto parece que soluciona el problema pero no sé si para todos los dispositivos, o producirá un efecto indeseado, lo desconozco. 

También encontré que se podía utilizar el siguente código:

WindowCompat.setDecorFitsSystemWindows(getWindow(), false);

en el onCreate() de cada activity pero no lo puedo asegurar

Por tanto, lo mejor es añadir las líneas de código a la Activity.java y no complicarnos la vida.



 

No hay comentarios:

Publicar un comentario