如何通过typed-array获取整数资源数组?

时间:2017-09-08 16:50:18

标签: android arrays android-custom-view

我在attr.xml中声明了以下declare-stylables:

<declare-styleable name="SideSpinnerAttrs">
    <attr name="stringValues" format="reference" />
    <attr name="iconIDs" format="reference"/>
</declare-styleable>

array.xml中的资源图标数组:

<integer-array name="spinnerIcons">
    <item>@drawable/ic_attachment_black_24dp</item>
    <item>@drawable/ic_audiotrack_black_24dp</item>
    <item>@drawable/ic_slideshow_black_24dp</item>
</integer-array>

我想调用并将这些图标从数组设置为imageView:

    private void readSpinnerIcons(Context context, AttributeSet attrs) {
    TypedArray icons=context.obtainStyledAttributes(attrs,R.styleable.SideSpinnerAttrs);

    int id=icons.getResourceId(R.styleable.SideSpinnerAttrs_iconIDs,0);
    int[] i=getResources().getIntArray(id);
    spinner_icon.setBackgroundResource(i[0]);
}

但是,数组“int [] i”是空的。为什么呢?

2 个答案:

答案 0 :(得分:0)

例如:

  <?xml version="1.0" encoding="utf-8"?>
    <resources>
         <integer-array name="IntArray">
              <item>2</item>
              <item>8</item>
              <item>10</item>
              <item>16</item>
         </integer-array>
    </resources>

您可以使用此

Resources r = getResources();
int[] bases = r.getIntArray(R.array.IntArray);

答案 1 :(得分:0)

问题在于这一行:

int id=icons.getResourceId(R.styleable.SideSpinnerAttrs_iconIDs,0);

第一个参数不是Styleable资源ID,而是包含资源ID的TypedArray的索引。由于您未提供有效索引,因此id始终是您用作第二个参数的默认值,这意味着您的int[]数组i将始终为空。

此外,请确保在使用TypedArray后再次调用recycle()。使用以下内容:

private void readSpinnerIcons(Context context) {
    TypedArray icons = context.obtainStyledAttributes(new int[] {R.styleable.SideSpinnerAttrs});
    int id = icons.getResourceId(0, 0);
    int[] i = getResources().getIntArray(id);
    spinner_icon.setBackgroundResource(i[0]);
    icons.recycle();
}