427 Stimmen

Dimensionswert aus res/values/dimension.xml aus dem Quellcode laden

Ich würde den Wert gerne so laden, wie er ist. Ich habe zwei dimension.xml Dateien, eine in /res/values/dimension.xml und die andere in /res/values-sw360dp/dimension.xml .

Vom Quellcode aus würde ich gerne etwas tun wie

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

Das funktioniert, aber der Wert, den ich erhalte, wird mit dem Faktor der Bildschirmdichte multipliziert (1,5 für hdpi, 2,0 für xhdpi, usw.).

Ich habe auch versucht, Folgendes zu tun

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

Das würde im Prinzip funktionieren, aber ich erhalte eine Zeichenkette, die mit "dip" endet...

970voto

AndroidGecko Punkte 13876

In meiner dimens.xml habe ich

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

Im Code If I do

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

Dies ergibt 72, was, wie in den Unterlagen angegeben, mit der Dichte des aktuellen Telefons multipliziert wird (in meinem Fall 48dp x 1,5)

genau wie in den Unterlagen angegeben:

Abrufen einer Dimension für eine bestimmte Ressourcen-ID. Einheitenumrechnungen basieren auf den aktuellen DisplayMetrics, die mit den Ressourcen verbunden sind.

Wenn Sie also einen exakten dp-Wert wie in xml wünschen, teilen Sie ihn einfach durch die DisplayMetrics-Dichte

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

dp wird jetzt 48 Jahre alt

25voto

Jug6ernaut Punkte 8179
Context.getResources().getDimension(int id);

21voto

Suragch Punkte 420096

Für diejenigen, die nur etwas sparen müssen int Wert in den Ressourcen zu finden, können Sie wie folgt vorgehen.

ganzzahlen.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);

20voto

Ovidiu Latcu Punkte 70281

En Resource Klasse hat auch eine Methode getDimensionPixelSize() Ich denke, das wird Ihren Bedürfnissen entsprechen.

16voto

Jonny Right Punkte 508

Sie können verwenden getDimensionPixelOffset() anstelle von getDimension, damit Sie nicht auf int casten müssen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X