Я пытаюсь добавить float в свой файл 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
, чтобы получить поплавок. Это необходимо? Почему или почему нет?
Это должен быть принятый ответ – Peter
Итак, где же этот XML должен идти? Размер xml в res/raw? –
@ G_V Да, я так думаю - хотя я не думаю, что это действительно имеет значение, поскольку все это подхватывает 'R'? – Rich