如何在Android中按名称从类型化数组资源中获取值?

时间:2012-10-01 14:38:34

标签: java android

假设我有一个像这样的资源xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <array name="difficulties">
        <item>
            <integer name="level">1</integer>
            <integer name="fixed_blocks">2</integer>
            <integer name="color_count">2</integer>
        </item>
        <item>
            <integer name="level">2</integer>
            <integer name="fixed_blocks">4</integer>
            <integer name="color_count">3</integer>
        </item>
        <item>
            <integer name="level">3</integer>
            <integer name="fixed_blocks">6</integer>
            <integer name="color_count">3</integer>
        </item>
    </array>    
</resources>

如何按名称从item获取整数值? TypedValue的API似乎不包含任何方法。如果TypedArray无法实现这一点,那该怎么办?

如果我可以按顺序从项目中获取值,那也可以。

1 个答案:

答案 0 :(得分:5)

我不记得这是可能的(但我可能是错的)。根据项目的结构(在difficulties数组中)你可以做其他事情,你可以使用整数数组的数组。知道项目数组在第一个位置levelfixed_blocks作为第二个位置等,您可以轻松获取值。您可以在此处找到此示例Android Resource - Array of Arrays

修改 这是你正在寻找的方法吗?

private int[] getLevelConstants(int level) {
    int[] result = null;
    TypedArray ta = getResources().obtainTypedArray(R.array.difficulties);
    // keep in mind the differences between the level(starts at 1) and the index of the difficulties array which starts at 0
    int id = ta.getResourceId(level, 0); 
    if (id > 0) {
        result = getResources().getIntArray(id);
    } else {
        // something bad
    }
    return result;
}

,数组将是:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <integer-array name="difficulties">
        <item>@array/level1</item>
        <item>@array/level2</item>
    </integer-array>

    <integer-array name="level1" >
        <item>1</item>
        <item>2</item>
        <item>2</item>
    </integer-array>

    <integer-array name="level2" >
        <item>2</item>
        <item>4</item>
        <item>3</item>
    </integer-array>

</resources>