web-dev-qa-db-fra.com

Comment obtenir la hauteur de DisplayCutout lors de la création d'une activité?

J'ai un jeu en plein écran SurfaceView (Portrait) et un fil qui s'affiche continuellement à la surface. 

SurfaceView est initialisé onCreate et sa taille est déterminée par la largeur et la hauteur de l'écran en pixels.

Une fois créé, il est défini comme vue de contenu de l'activité de jeu (pas de définitions XML):

Bitmap frameBuffer = Bitmap.createBitmap(screenWidth, screenHeight, Config.ARGB_8888);

MySurfaceView renderView = new MySurfaceView(this, frameBuffer);

this.setContentView(renderView);

Le problème est que la hauteur de l'écran n'inclut pas les découpes d'affichage (pour les périphériques qui en sont équipés) et est plus grande que l'écran de dessin autorisé, car la renderView est placée sous la zone de découpe et ne l'utilise pas pour le rendu.

Je cherche à trouver le vrai screen height - display cutout height afin de pouvoir donner au tampon de trame cette hauteur.

Savez-vous s’il existe un moyen d’obtenir la hauteur de la zone de découpe d’affichage onCreate, de la même manière que nous pouvons obtenir la hauteur de la barre de navigation/de statut. Voici un extrait qui renvoie la hauteur de la barre de navigation:

Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "Android");
if (resourceId > 0) {
    int navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}

Merci de votre aide!

--- METTRE À JOUR ---

Je vais essayer de clarifier la question plus:

1) onCreate un portrait plein écran SurfaceView est créé avec les dimensions de la largeur et de la hauteur de l'écran (pas de XML)

2) Le mode immersif est activé pour le niveau API> 19 (KitKat)

3) La largeur et la hauteur de l'écran sont prises avec Display.getSize () ou Display.getRealSize () en fonction du niveau de l'API.

4) Sur les appareils dotés d’une découpe supérieure de l’affichage, la vue est automatiquement placée sous la découpe et le contenu inférieur est découpé, et c’est le problème

5) Je voudrais obtenir la hauteur de la découpe d'affichage onCreate, afin de pouvoir créer la hauteur de SurfaceView à screenHeight - displayCutoutHeight.

6) Le problème consiste à trouver la hauteur de la découpe d'affichage.

8
luben

Arrêtez de lire les ressources privées Android et arrêtez d'appeler getRealSize (). Appelez simplement getSize () et les valeurs que vous récupérerez seront bonnes à utiliser.

0
j__m