Existe-t-il un moyen de déterminer la hauteur de l’écran physique Android en cm ou en pouces?

J’ai besoin de savoir exactement quelle est la taille de l’écran sur l’appareil en unités de longueur réelle, afin de pouvoir calculer l’accélération due à la gravité en pixels par milliseconde.

Y a-t-il une méthode quelque part dans l’API Android pour cela?

Utilisez le suivant:

DisplayMesortingcs dm = new DisplayMesortingcs(); getWindowManager().getDefaultDisplay().getMesortingcs(dm); double x = Math.pow(mWidthPixels/dm.xdpi,2); double y = Math.pow(mHeightPixels/dm.ydpi,2); double screenInches = Math.sqrt(x+y); Log.d("debug","Screen inches : " + screenInches); 

Lorsque mWidthPixels et mHeightPixels sont pris depuis le code ci-dessous

 private void setRealDeviceSizeInPixels() { WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); DisplayMesortingcs displayMesortingcs = new DisplayMesortingcs(); display.getMesortingcs(displayMesortingcs); // since SDK_INT = 1; mWidthPixels = displayMesortingcs.widthPixels; mHeightPixels = displayMesortingcs.heightPixels; // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) { try { mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display); mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display); } catch (Exception ignored) { } } // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 17) { try { Point realSize = new Point(); Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize); mWidthPixels = realSize.x; mHeightPixels = realSize.y; } catch (Exception ignored) { } } 

Voir ce post pour référence: Obtenir les dimensions de l’écran en pixels

Pour obtenir la taille actuelle, utilisez Math.round à la fin.

  DisplayMesortingcs dm = new DisplayMesortingcs(); getWindowManager().getDefaultDisplay().getMesortingcs(dm); double x = Math.pow(dm.widthPixels/dm.xdpi,2); double y = Math.pow(dm.heightPixels/dm.ydpi,2); double screenInches = Math.sqrt(x+y); Log.d("debug","Screen inches : " + screenInches); screenInches= (double)Math.round(screenInches * 10) / 10; 

Les développeurs Android parsingnt les informations.

utilisez xdpi * widthPixels et ydpi * heightPixels peuvent vous donner ce que vous voulez je pense.

L’extrait de code suivant vous aidera à obtenir la taille de l’écran en pouces

 public static double getScreenSizeInches(Activity activity){ WindowManager windowManager = activity.getWindowManager(); Display display = windowManager.getDefaultDisplay(); DisplayMesortingcs displayMesortingcs = new DisplayMesortingcs(); display.getMesortingcs(displayMesortingcs); // since SDK_INT = 1; int mWidthPixels = displayMesortingcs.widthPixels; int mHeightPixels = displayMesortingcs.heightPixels; // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) { try{ mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display); mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display); } catch (Exception ignored) {} } // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 17) { try { Point realSize = new Point(); Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize); mWidthPixels = realSize.x; mHeightPixels = realSize.y; } catch (Exception ignored) {} } DisplayMesortingcs dm = new DisplayMesortingcs(); activity.getWindowManager().getDefaultDisplay().getMesortingcs(dm); double x = Math.pow(mWidthPixels / dm.xdpi, 2); double y = Math.pow(mHeightPixels / dm.ydpi, 2); return Math.sqrt(x + y); } 

J’espère que cette aide

Vous devez utiliser la densité de l’écran pour calculer cela.

 Context.getResources().getDisplayMesortingcs().density 

Selon la documentation:

La densité logique de l’affichage. Il s’agit d’un facteur d’échelle pour l’unité Pixels indépendants de densité, où un DIP est un pixel sur un écran d’approximativement 160 dpi (par exemple un écran 240×320, 1,5 “x2”), fournissant la ligne de base de l’affichage du système. Ainsi, sur un écran de 160 dpi, cette valeur de densité sera de 1; sur un écran de 120 ppp, ce serait 0,75; etc.

Cette valeur ne correspond pas exactement à la taille réelle de l’écran (donnée par xdpi et ydpi, mais sert plutôt à redimensionner la taille de l’interface utilisateur globale en fonction des modifications brutes de la résolution d’affichage. Par exemple, un écran 240×320 aura une densité de 1 même si sa largeur est de 1,8 “, 1,3”, etc. Cependant, si la résolution de l’écran est augmentée à 320×480 mais que la taille de l’écran rest de 1,5 “x2” alors la densité serait augmentée (probablement à 1,5).