J'ai créé mon application avec la hauteur et la largeur données en pixels pour un appareil Pantech dont la résolution est 480x800
.
Je dois convertir la hauteur et la largeur d'un appareil G1.
Je pensais que le convertir en dp résoudrait le problème et fournirait la même solution pour les deux appareils.
Existe-t-il un moyen simple de convertir des pixels en dp?
Aucune suggestion?
android
pixel
resolution
dpi
Indhu
la source
la source
px
,dp
,sp
Formules de conversionRéponses:
la source
applyDimension
? Puis-je simplement fairegetResource().getDisplayMetrics()
, ou y a-t-il autre chose?Context
utilisation d'objetsResources.getSystem().getDisplayMetrics()
la source
Resource.getSystem()
(accent sur le mien): "Retourne un objet global shared Resources qui donne accès aux seules ressources système (pas de ressources d'application), et n'est pas configuré pour l'écran actuel ( ne peut pas utiliser les unités de dimension , ne change pas basé sur l'orientation, etc.). "DisplayMetrics.DENSITY_DEFAULT
place de160f
developer.android.com/reference/android/util/…Mettez de préférence dans une classe Util.java
la source
density
équivaut à.75
leldpi
(120
dpi)1.0
surmdpi
(160
dpi; base)1.5
lehdpi
(240
dpi)2.0
lexhdpi
(320
dpi)3.0
lexxhdpi
(480
dpi)4.0
lexxxhdpi
(640
dpi)Utilisez ce convertisseur en ligne pour jouer avec les valeurs dpi.
EDIT: Il semble qu'il n'y ait pas de relation 1: 1 entre le
dpi
seau etdensity
. Il semble que l'Nexus 5X
êtrexxhdpi
ait unedensity
valeur de2.625
(au lieu de3
). Voyez par vous-même dans les métriques de l' appareil .la source
Vous pouvez l'utiliser .. sans contexte
Comme @Stan l'a mentionné .. l'utilisation de cette approche peut entraîner des problèmes si le système change de densité. Alors soyez conscient de ça!
Personnellement, j'utilise Context pour cela. C'est juste une autre approche avec laquelle je voulais vous partager
la source
Si vous pouvez utiliser les dimensions XML, c'est très simple!
Dans votre
res/values/dimens.xml
:Puis dans votre Java:
la source
Selon le Guide de développement Android:
Mais souvent, vous voudrez effectuer cette opération dans l'autre sens lorsque vous recevrez un design exprimé en pixels. Donc:
Si vous utilisez un appareil à 240 dpi, ce rapport est de 1,5 (comme indiqué précédemment), cela signifie donc qu'une icône de 60 pixels équivaut à 40 dpi dans l'application.
la source
Sans
Context
méthodes statiques élégantes:la source
Resources.getSystem()
javadoc dit "Renvoyer un objet global de ressources partagées qui donne accès uniquement aux ressources système (pas de ressources d'application) et n'est pas configuré pour l'écran actuel (ne peut pas utiliser les unités de dimension, ne change pas en fonction de l'orientation, etc.)." Cela indique à peu près que vous ne devriez pas faire cela même si cela fonctionne d'une manière ou d'une autre.Pour
DP to Pixel
Créer une valeur dans
dimens.xml
Obtenez cette valeur en
pixel
tant que:la source
Vous pouvez donc utiliser le formulateur suivant pour calculer la bonne quantité de pixels à partir d'une dimension spécifiée en dp
la source
convertToDp
.Pour toute personne utilisant Kotlin:
Usage:
la source
Il existe un utilitaire par défaut dans le SDK Android: http://developer.android.com/reference/android/util/TypedValue.html
la source
resultPix
doit être de type int.int resultPix = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,1,getResources().getDisplayMetrics())
utiliser kotlin-extension le rend meilleur
MISE À JOUR:
En raison de
displayMetrics
fait partie des ressources partagées mondiales , nous pouvons utiliserResources.getSystem()
la source
Cela devrait vous donner la conversion dp en pixels:
Cela devrait vous donner les pixels de conversion en dp:
la source
Kotlin
Java
la source
Probablement la meilleure façon si vous avez la dimension à l'intérieur des valeurs / dimen est d'obtenir la dimension directement à partir de la méthode getDimension (), elle vous renverra la dimension déjà convertie en valeur de pixel.
Juste pour mieux expliquer cela,
renverra la dimension déjà convertie en pixel COMME UN FLOTTEUR.
retournera le même mais tronqué à int, donc COMME UN ENTIER.
Voir la référence Android
la source
où ressource est context.getResources ().
la source
comme ça:
dépend du contexte, retourne la valeur flottante, méthode statique
à partir de: https://github.com/Trinea/android-common/blob/master/src/cn/trinea/android/common/util/ScreenUtils.java#L15
la source
Approche plus élégante utilisant la fonction d'extension de kotlin
Usage:
la source
function name
" qui je me rends compte à l'envers dans ce cas. Pour clarifier l'intention de chaque fonction, les noms des fonctions pourraient être mis à jour pour lire respectivement dpToPx et pxToDp.la source
Si vous développez une application critique pour les performances, veuillez considérer la classe optimisée suivante:
la source
pour convertir des pixels en dp, utilisez TypedValue .
Comme mentionné dans la documentation: Conteneur pour une valeur de données typée dynamiquement.
et utilisez la méthode applyDimension :
qui convertit une valeur de données complexes non compressée contenant une dimension en sa valeur finale en virgule flottante comme suit:
J'espère que cela pourra aider .
la source
Voici comment cela fonctionne pour moi:
Vous pouvez faire de même pour la largeur.
la source
Beaucoup de bonnes solutions ci-dessus. Cependant, la meilleure solution que j'ai trouvée est la conception de Google:
https://design.google.com/devices/
la source
Vous devez utiliser dp comme vous le feriez avec des pixels. C'est tout ce qu'ils sont; afficher des pixels indépendants. Utilisez les mêmes nombres que vous le feriez sur un écran de densité moyenne, et la taille sera magiquement correcte sur un écran de haute densité.
Cependant, il semble que vous ayez besoin de l'option fill_parent dans votre conception de mise en page. Utilisez fill_parent lorsque vous souhaitez que votre vue ou contrôle s'étende à toute la taille restante dans le conteneur parent.
la source
PX
etDP
sont différents mais similaires.DP
est la résolution lorsque vous ne tenez compte que de la taille physique de l'écran. Lorsque vous l'utilisezDP
, votre disposition sera mise à l'échelle sur d'autres écrans de taille similaire avec despixel
densités différentes .Parfois, vous le souhaitez
pixels
, et lorsque vous traitez avec des dimensions dans du code, vous traitez toujours avec de la réalitépixels
, sauf si vous les convertissez.Donc, sur un appareil Android, un
hdpi
écran de taille normale ,800x480 is 533x320
enDP
(je crois). Pour convertirDP
enpixels /1.5
, pour reconvertir*1.5
. Ce n'est que pour la taille d'écran uniquedpi
, et cela changerait selon la conception. Nos artistes me donnentpixels
cependant et je me convertis àDP
l'1.5
équation ci-dessus .la source
Si vous voulez des valeurs entières , l'utilisation de Math.round () arrondira le flottant à l'entier le plus proche.
la source
La meilleure réponse vient du framework Android lui-même: utilisez simplement cette égalité ...
(convertit dp en px)
la source
Cela fonctionne pour moi (C #):
la source
kotlin
Java
la source