【问题标题】:Creating integer array of resource IDs创建资源 ID 的整数数组
【发布时间】:2011-07-17 20:30:54
【问题描述】:

我的res/drawable 文件夹中有一些图像。假设img1.pngimg2.pngimg3.png。我目前正在像这样在 Java 中创建这些图像 ID 的整数数组

int[] imgIds = {R.drawable.img1, R.drawable.img2, R.drawable.img3};

相反,是否可以像这样在res/values 文件之一(比如strings.xml)中创建一个整数数组

<integer-array name="img_id_arr">
    <item>@drawable/img1</item>
    <item>@drawable/img2</item>
    <item>@drawable/img3</item>
</integer-array>

然后通过getResources().getIntArray(R.array.img_id_arr)在Java中访问它?

【问题讨论】:

    标签: android arrays android-resources


    【解决方案1】:

    只使用“数组”而不是“整数数组”。请参阅开发者指南中的Typed Array

    【讨论】:

    • 这似乎适用于可绘制对象,但不适用于样式,例如: @android:style/Theme@android:style/ Theme.Light@android:style/Theme.Holo@android:style/Theme.Holo.Light 这如何适用于其他资源除了drawables之外的ID?
    • 我认为,据我所知,是创建一个表示预编译值本身的 int 数组,而不是它所代表的值。如果有人有任何想法,欢迎。
    【解决方案2】:

    XML integer array, resource references, getIntArray

    TypedArray ar = context.getResources().obtainTypedArray(R.array.my_array);
    int len = ar.length();
    int[] resIds = new int[len];
    for (int i = 0; i < len; i++)
        resIds[i] = ar.getResourceId(i, 0);
    ar.recycle();
    // Do stuff with resolved reference array, resIds[]...
    for (int i = 0; i < len; i++)
        Log.v (TAG, "Res Id " + i + " is " + Integer.toHexString(resIds[i]));
    

    【讨论】:

    • 是否可以获得对资源而不是数组的单个引用?如果我想检查 2 个资源 ID 是否相等,我需要它。
    • 我想我们永远不会知道
    【解决方案3】:

    创建一个LevelListDrawable。虽然它不完全是你想要的,但几乎可以实现。

    【讨论】:

    • 非常优雅但被低估的解决方案。
    【解决方案4】:

    我认为最好将它们保存在代码中。

    private static final int[] AVATARS = new int[]{
                R.drawable.ava_1, R.drawable.ava_2, R.drawable.ava_3...};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 2019-07-15
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多