Android float / double资源类型

时间:2015-05-01 10:06:46

标签: android

正如我从可用的Android Resource types所理解的那样,除非你使用here中提到的一些hacks,否则没有直接的方法可以将浮点值用作资源。对此有什么约定吗?

3 个答案:

答案 0 :(得分:23)

不,没有为float / double提供直接资源类型。

但是,有两个黑客可以做到这一点。

1)在 dimens.xml

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

从java引用

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

第二个是Bojan和Haresh所建议的,要将值用作字符串并在runTime中解析它的代码。

答案 1 :(得分:17)

将double保存为String资源

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

然后只需在你的代码中解析这个

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

您也可以创建自己的资源值类型,并从此处获取

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

然后像这样得到它

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

但是不可能像这样得到双打,而且我认为它不仅仅是解析字符串资源的性能较差,所以我更喜欢我的第一个选项。

答案 2 :(得分:0)

将浮点数添加到dimens.xml:

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

要从XML引用:

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

要以编程方式读取此值,可以使用androidx.core中的ResourcesCompat.getFloat

等级依赖性:

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

用法:

import androidx.core.content.res.ResourcesCompat;

...

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