Comment obtenir la densité d'écran par programme dans Android?
Je veux dire: comment trouver la résolution d'écran de l'appareil actuel?
android
dpi
screen-density
Praveen
la source
la source
getDisplayMetrics().xdpi
, ce qui est censé renvoyer le vrai dpi de l'appareil. Veuillez noter que cette valeur n'est pas systématiquement définie correctement sur les appareils par les fabricants, vous ne pouvez donc pas les utiliser . Triste mais vrai: les informations sur le vrai dpi ne sont pas disponibles . Source: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpi
etgetResources().getDisplayMetrics().ydpi
vous donnera des densités horizontales et verticales réelles , qui sont dans la plupart des cas différentes.Réponses:
Vous pouvez obtenir des informations sur l'affichage à partir de la structure DisplayMetrics :
Bien qu'Android n'utilise pas de mappage de pixels direct, il utilise une poignée de valeurs de pixels indépendants de densité quantifiés, puis s'adapte à la taille réelle de l'écran. Ainsi , la
metrics.densityDpi
propriété sera l' une desDENSITY_xxx
constantes (120
,160
,213
,240
,320
,480
ou640
dpi).Si vous avez besoin de la densité réelle de pixels lcd (peut-être pour une application OpenGL), vous pouvez l'obtenir à partir des propriétés
metrics.xdpi
etmetrics.ydpi
pour la densité horizontale et verticale respectivement.Si vous ciblez des niveaux d'API antérieurs à 4. La
metrics.density
propriété est un facteur d'échelle à virgule flottante de la densité de référence (160 dpi). La même valeur maintenant fournie parmetrics.densityDpi
peut être calculéela source
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
été officiellement ajoutée à l'API 17, mais j'ai été surpris de constater qu'elle fonctionnait correctement, même sur un appareil 4.0 que j'ai essayé.Cela fonctionne également:
Cela vous donnera:
0,75 - ldpi
1.0 - mdpi
1,5 - hdpi
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
ref: densité
ref 2
la source
WindowManager
(par exemple à l'intérieur d'un chargeur). Il suffit de le multiplier par 160tvdpi
. Pour plus d'informations surtvdpi
voir iciCela fonctionnera au niveau 4 et supérieur de l'API.
la source
La réponse de Blundell comme méthode d'aide statique:
la source
Essaye ça:
la source
View
beaucoup plus facilement (c'est là que j'en ai besoin!)Pour obtenir des dpi:
la source
Voici les constantes de densité, source :
Il existe, en plus des densités standard, 5 intermédiaires. Compte tenu de ce fait, le code suivant sera un exemple de travail complet:
Alternativement, vous pouvez trouver des constantes de densité en utilisant
densityDpi
:la source
La réponse suivante est une petite amélioration basée sur la réponse de qwertzguy.
la source
En fait, si vous voulez avoir le vrai dpi d'affichage, la réponse se situe quelque part entre les deux si vous recherchez des mesures d'affichage:
densitéDpi * 160 vous donnera les valeurs / suggestion quelle densité vous devez utiliser
comme spécifié dans les articles précédents
mais
dm.xdpi
ne vous donnera pas toujours VRAI dpi de l'affichage donné: Exemple:alors peut-être que le vrai dpi de l'écran devrait être Densité * xdpi .. mais je ne sais pas si c'est la bonne façon de le faire!
la source
Cela devrait vous aider dans votre activité ...
PRODUCTION :
la source
la source
Si vous souhaitez récupérer la densité d'un service, cela fonctionne comme ceci:
la source
Vous devriez essayer ceci. Juste ajouté une méthode qui trouvera et montrera le toast. C'est dans quelle catégorie l'appareil tombe.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
la source
Cela devrait fonctionner.
la source
Encore une autre réponse:
la source
Une autre façon d'obtenir la densité chargée par l'appareil:
Créez des
values
dossiers pour chaque densitéAjoutez une ressource de chaîne dans leurs ressources respectives
strings.xml
:Ensuite, obtenez simplement la ressource de chaîne et vous avez votre densité:
Si la densité est supérieure à
XXXHDPI
, elle sera par défautXXXHDPI
ou si elle est inférieure àHDPI
celle par défautMDPI
J'ai laissé de côté
LDPI
, car pour mon cas d'utilisation, ce n'est pas nécessaire.la source
Essaye ça...
En kotlin
Vous pouvez appeler par
println("density: ${determineScreenDensityCode()}")
et la sortie seraSystem.out: density: xxxhdpi
la source
J'utilise le code suivant pour accéder à DPI à partir de modules (pas besoin d'avoir accès à un objet contextuel):
la source
Dans Android, vous pouvez obtenir la densité d'écran comme ceci:
Et à Kotlin comme ceci:
Assurez-vous de vérifier régulièrement si de nouvelles densités sont ajoutées .
la source