dimens.xml
파일에 부동을 추가하려고합니다.
나는 following SO answer을 읽었습니다. 솔루션을 시도했을 때 주석에 설명 된 예외가 있습니다. 나는 이유를 알아 내려는 중입니다. 예외가 발생했습니다. getDimension 방법 정의 여기
final float zoom = this.getResources().getDimension(R.dimen.zoom_level);
내가 안드로이드 소스에 뛰어되고 : 여기
<item name="zoom_level" format="float" type="dimen">15.0</item>
이 불면 코드입니다 : 여기에 완성도를 들어
은 XML입니다
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
A가 들어 것으로 나타났습니다. 그러나 XML에서는 type="float"
을 쓸 수 없습니다.
설명에 설명 된 해결 방법은 type=string
을 사용하고 Float.parse
을 사용하여 float을 얻는 것입니다. 필요한가? 그 이유는 무엇?
이것은 대답이되어야합니다. – Peter
그러면이 XML은 어디에 있습니까? res/raw의 dimen xml? –
@G_V 네, 그렇게 생각합니다. 어쨌든 모든 것이'R'에 의해 선택되어서 정말 중요하다고 생각하지 않습니다. – Rich