web-dev-qa-db-fra.com

Charger la valeur de dimension à partir de res / values ​​/ dimension.xml à partir du code source

Je voudrais charger la valeur telle quelle. J'ai deux fichiers dimension.xml, l'un dans /res/values/dimension.xml et l'autre dans /res/values-sw360dp/dimension.xml.

Du code source, je voudrais faire quelque chose comme

getResources().getDimension(R.dimen.tutorial_cross_marginTop);

Cela fonctionne, mais la valeur que je reçois est multipliée par le facteur de densité de l'écran (1,5 pour hdpi, 2,0 pour xhdpi, etc.).

J'ai aussi essayé de faire

getResources().getString(R.dimen.tutorial_cross_marginTop);

Cela fonctionnerait en principe mais je reçois une chaîne qui se termine par "dip" ...

313

Dans mon dimens.xml j'ai

<dimen name="test">48dp</dimen>

En code Si je le fais

int valueInPixels = (int) getResources().getDimension(R.dimen.test)

cela retournera 72 qui comme l'état de la documentation est multiplié par la densité du téléphone actuel (48dp x 1.5 dans mon cas)

exactement comme dans la documentation:

Récupérer une dimension pour un identifiant de ressource particulier. Les conversions d'unités sont basées sur les DisplayMetrics actuels associés aux ressources.

donc, si vous voulez une valeur dp exacte comme dans le XML, il suffit de la diviser avec la densité DisplayMetrics

int dp = (int) (getResources().getDimension(R.dimen.test) / getResources().getDisplayMetrics().density)

dp sera 48 maintenant

749
AndroidGecko
Context.getResources().getDimension(int id);
19
Jug6ernaut

La classe Resource a également une méthode getDimensionPixelSize () qui, selon moi, conviendra à vos besoins.

19
Ovidiu Latcu

Pour ceux qui ont juste besoin de sauvegarder une valeur int dans les ressources, vous pouvez procéder comme suit.

integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="default_value">100</integer>
</resources> 

Code

int defaultValue = getResources().getInteger(R.integer.default_value);
12
Suragch

Vous pouvez utiliser getDimensionPixelOffset () au lieu de getDimension, vous n'avez donc pas besoin de transtyper en int.

int valueInPixels = getResources().getDimensionPixelOffset(R.dimen.test)
8
Jonny Right

Vous pouvez aussi écrire un entier dans un fichier XML.
avez-vous vu [this] http://developer.Android.com/guide/topics/resources/more-resources.html#Integer ? utilisé comme .

 context.getResources().getInteger(R.integer.height_pop);
3
AndroidLad
    This works but the value I get is multiplied times the screen density factor
  (1.5 for hdpi, 2.0 for xhdpi, etc).

Je pense que c’est bien d’obtenir la valeur selon la résolution mais si vous ne voulez pas faire ceci, donnez ceci en px .......

Pixel indépendant de la densité (dp)

Unité de pixel virtuelle à utiliser lors de la définition de la disposition de l'interface utilisateur pour exprimer les dimensions ou la position de la disposition de manière indépendante de la densité. Le pixel indépendant de la densité est équivalent à un pixel physique sur un écran de 160 ppp, ce qui correspond à la densité de base supposée par le système pour un écran de densité "moyenne". Au moment de l'exécution, le système gère de manière transparente toute mise à l'échelle des unités dp, si nécessaire. based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. Vous devez toujours utiliser des unités dp lors de la définition de l'interface utilisateur de votre application pour garantir un affichage correct de votre interface utilisateur sur des écrans de densités différentes.

Je pense qu'il est bon de changer la valeur en fonction de la résolution, mais si vous ne voulez pas le faire, donnez-le en px .......

référez-vous ceci lien

comme par la

dp

Pixels indépendants de la densité - Unité abstraite basée sur la densité physique de l'écran. Ces unités sont relatives à un écran de 160 dpi (points par pouce), sur lequel 1dp est à peu près égal à 1px. When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down. Le rapport dp sur pixel changera avec la densité de l'écran, mais pas nécessairement proportionnellement. L'utilisation d'unités dp (au lieu d'unités px) est une solution simple pour redimensionner correctement les dimensions de la vue dans votre mise en page pour différentes densités d'écran. En d'autres termes, il assure la cohérence des tailles réelles de vos éléments d'interface utilisateur sur différents périphériques.

px

Pixels - Correspond aux pixels réels à l'écran. Cette unité de mesure n'est pas recommandée car la représentation réelle peut varier d'un périphérique à l'autre. chaque périphérique peut avoir un nombre différent de pixels par pouce et peut avoir plus ou moins de pixels totaux disponibles à l'écran.

2
Dheeresh Singh