android – 资源$NotFoundException:资源ID无效.为什么?

前端之家收集整理的这篇文章主要介绍了android – 资源$NotFoundException:资源ID无效.为什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在我的dimens.xml文件添加一个浮点数.

我正在阅读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中的资源类.

原文链接:https://www.f2er.com/android/317575.html

猜你在找的Android相关文章