Android float/double resource type

前端 未结 3 1292
囚心锁ツ
囚心锁ツ 2020-12-30 00:04

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

相关标签:
3条回答
  • 2020-12-30 00:15

    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.

    0 讨论(0)
  • 2020-12-30 00:17

    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);
    
    0 讨论(0)
  • 2020-12-30 00:18

    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.

    0 讨论(0)
提交回复
热议问题