Как я понял из доступных типов ресурсов Android, нет прямого способа использовать значения float в качестве ресурсов, если вы не используете некоторые хаки, такие как упомянутый в здесь. Есть ли какое-нибудь соглашение или что-то в этом роде?
Тип плавающего/двойного ресурса Android
Ответ 1
Нет, для float/double нет прямого типа ресурсов.
Но да, есть два взлома.
1) В dimens.xml
<item name="float" type="dimen" format="float">9.52</item>
Ссылка на java
TypedValue typedValue = new TypedValue();
getResources().getValue(R.dimen.my_float_value, typedValue, true);
float myFloatValue = typedValue.getFloat();
И во-вторых, как предложил Боян и Хареш, использовать значение как строку и проанализировать его в вашем коде в runTime.
Ответ 2
Просто сохраните свой двойник в качестве ресурса String
<string name="some_decimal">0.12154646</string>
И затем просто проанализируйте, что в вашем коде, как этот
double some_decimal = Double.parseDouble(context.getString(R.string.some_decimal));
Вы также можете сделать свой собственный тип значений ресурсов и получить его оттуда, как это
<item name="some_decimal" type="vals" format="float">2.0</item>
И затем сделайте это так
TypedValue tempVal = new TypedValue();
getResources().getValue(R.vals.some_decimal, tempVal, true);
float some_decimal = tempVal.getFloat();
Но невозможно получить такие двойники, и я думаю, что он менее эффективен, чем просто разбирает строковый ресурс, поэтому я предпочитаю свой первый вариант.
Ответ 3
Добавьте число с плавающей точкой в sizess.xml:
<item format="float" name="my_dimen" type="dimen">0.54</item>
Для ссылки из XML:
<ImageView
android:alpha="@dimen/my_dimen"
...
Чтобы прочитать это значение программно, вы можете использовать ResourcesCompat.getFloat
из androidx.core
Зависимость Gradle:
implementation("androidx.core:core:${version}")
Использование:
import androidx.core.content.res.ResourcesCompat;
...
float value = ResourcesCompat.getFloat(context.getResources(), R.dimen.my_dimen);