从 Android 中的 dimens.xml 资源文件获取整数值

Get integer value from dimens.xml resource file in Android

我有一个 EditText,它是十进制的,我使用 android:maxLength 中的 xml 属性设置它的长度:

    <EditText
        android:id="@+id/quantity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal"
        android:singleLine="true"
        android:maxLength="@integer/quantity_length" />

因为它的长度不仅会用在 UI xml 文件中,还会用在 java class 和其他一些地方,我想要为了避免以后更新这个值时出现问题,所以我想把长度集中在dimens.xml资源文件中,如下所示:

dimens.xml

<resources>

    <!-- other things -->

    <!-- Constants -->
    <item name="quantity_length" format="integer" type="integer">10</item>

    <!-- other things -->

</resources>

从 java class 我需要读取这个值所以我执行:

    TypedValue typedValue = new TypedValue();
    this.getResources().getValue(R.integer.quantity_length, typedValue, true);

但我注意到没有方法 getInt(),只有 getFloat():

    int digitsBefore = typedValue.getFloat();

所以我需要将其作为整数获取...。该怎么做?当然,也许我可以使用 getFloat() 然后转换为整数来获取它......但我不知道这是否是一种优雅的方式......所以有什么想法吗?

更新: 哎呀我做错了。这是: 整数数量 = typedValue.getFloat();

而不是:

int digitsBefore = typedValue.getFloat();

使用:

Integer.ParseInt(digitsBefore);

为什么不把整数存入res/integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="quantity_length">12</integer>
</resources>

并访问代码中的值

int myInteger = getResources().getInteger(R.integer.quantity_length);

或在XML

android:maxLength="@integer/quantity_length"

您不需要 TypedValue 使用以下内容

(int) this.getResources().getDimension(R.integer.quantity_length);

以你的例子,为什么不用这个方法呢?

XML

<integer name="quantity_length">10</integer>

JAVA

getResources().getInteger(R.integer.quantity_length);
int max = getContext().getResources().getInteger(R.integer.quantity_length);

我使用 Android Studio 3.3.1 和 SDK lollipop

进行了测试

注意路径...

清理并构建...我有一段相当艰难的时间,认为它不起作用,但删除文件并重新添加后,几乎没有清理和构建,我让它工作起来很奇怪...

1.这有效(注意刻度线及其路径)

2。这是证据