我在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”是空的。为什么呢?
答案 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();
}