我正在尝试将一个浮点数添加到我的 dimens.xml
文件中。
我正在阅读 以下SO答案。当我尝试这个解决方案时,我遇到了评论中描述的异常。我正在努力弄清楚为什么会抛出该异常。
为了完整起见,这是XML:
<item name="zoom_level" format="float" type="dimen">15.0</item>
这是导致程序崩溃的代码:
final float zoom = this.getResources().getDimension(R.dimen.zoom_level);
我进入了Android源代码,并且这里是getDimension方法的定义:
public float getDimension(int id) throws NotFoundException {
synchronized (mTmpValue) {
TypedValue value = mTmpValue;
getValue(id, value, true);
if (value.type == TypedValue.TYPE_DIMENSION) {
return TypedValue.complexToDimension(value.data, mMetrics);
}
throw new NotFoundException(
"Resource ID #0x" + Integer.toHexString(id) + " type #0x"
+ Integer.toHexString(value.type) + " is not valid");
}
}
出于某种原因,value.type != TypedValue.TYPE_DIMENSION
。我的Android源代码还没有完全设置好,所以我无法轻松地在其中添加一个Log.w("YARIAN", "value type is " + value.type)'
语句。
然后我进入了getValue
,调用链似乎是:
Resources.getValue -> AssetManager.getResourceValue -> AssetManager.loadResourceValue
loadResourceValue
是一个本地方法,这就是我的挖掘结束的地方。
有人知道理解正在发生什么的最佳方法吗?
我还注意到Resources
拥有TypedValue.TYPE_FLOAT
和TypedValue.TYPE_DIMENSION
。但在XML中,我无法编写type="float"
。
评论中描述的解决方法是使用type=string
,然后使用Float.parse
来获取浮点数。这是必要的吗?为什么?
R
捕捉到,对吧? - Rich