我正在阅读following SO answer.当我尝试解决方案时,我得到了评论中描述的异常.我试图找出抛出异常的原因.
为了完整性,这里是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来获取浮点数.这有必要吗?为什么或者为什么不?
解决方法 我知道这是一个迟到的答案,但你应该使用 TypedValue#getFloat()而不是像你建议的那样将字符串解析为浮点数.XML:
<item name="float_resource" format="float" type="raw">5.0</item>
Java的:
TypedValue out = new TypedValue();context.getResources().getValue(R.raw.float_resource,out,true);float floatResource = out.getfloat();
如果您愿意,可以将fraction,raw或string作为类型,这仅对应于R中的资源类.
总结以上是内存溢出为你收集整理的android – 资源$NotFoundException:资源ID无效.为什么?全部内容,希望文章能够帮你解决android – 资源$NotFoundException:资源ID无效.为什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)