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