31

As I understood from available Android Resource types, there is no straight way to use float values as resources, unless you use some hacks such as the one mentioned in here. Is there any convention or something for this?

3
  • try to define float or double as string and convert it to appropriate at run time. Commented May 1, 2015 at 10:13
  • Android could provide Integer or Boolean type values the way that you mentioned, but why there are specific type values such as Integer or Boolean but not Float? what is the reason? Commented May 1, 2015 at 10:33
  • Check out : stackoverflow.com/questions/29967258/… Commented May 1, 2015 at 10:37

3 Answers 3

39

No, There is no direct resource type is provided for float/double.

But Yes there is two hacks to do that.

1) In dimens.xml

<item name="float" type="dimen" format="float">9.52</item>

Referencing from java

TypedValue typedValue = new TypedValue();
getResources().getValue(R.dimen.my_float_value, typedValue, true);
float myFloatValue = typedValue.getFloat();

And Second is as Bojan and Haresh suggested, To use value as string and parse it in your code at runTime.

Sign up to request clarification or add additional context in comments.

1 Comment

what if you use <dimen name="your_param">9.52</dimen> is that doesn't work?
20

Add a float to dimens.xml:

<item format="float" name="my_dimen" type="dimen">0.54</item>

To reference from XML:

<ImageView 
    android:alpha="@dimen/my_dimen"
    ...

To read this value programmatically you can use ResourcesCompat.getFloat from androidx.core

Gradle dependency:

implementation("androidx.core:core:${version}")

Usage:

import androidx.core.content.res.ResourcesCompat;

...

float value = ResourcesCompat.getFloat(context.getResources(), R.dimen.my_dimen);

Comments

19

Just save your double as a String resource

<string name="some_decimal">0.12154646</string>

And then just parse that in your code like this

double some_decimal = Double.parseDouble(context.getString(R.string.some_decimal));

You can also make your own type of resource values and get it from there like this

<item name="some_decimal" type="vals" format="float">2.0</item>

And then get it like this

TypedValue tempVal = new TypedValue();
getResources().getValue(R.vals.some_decimal, tempVal, true);
float some_decimal = tempVal.getFloat();

But it's impossible to get doubles like this and also I think that it's less performant than just simply parsing a string resource, so I prefer my first option.

2 Comments

Be aware! Don't retrieve such strings by "getResources().getString(R.string.YourStringTag)", this will return "Experimental" as string.
thanks, in case of Kotlin use (doubleVal).toDouble() instead of Double.parseDouble(doubleVal)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.