在 Android 的自定义 View 中,你可以使用属性(attr
)来接收一组图片资源,但是属性的类型应该是 reference
,而不是直接的图片资源。
以下是一个示例,展示如何定义一个接收一组图片资源的自定义属性:
res/values/attrs.xml
文件中定义属性:<resources>
<declare-styleable name="CustomView">
<attr name="imageList" format="reference" />
declare-styleable>
resources>
public class CustomView extends View {
private List<Integer> imageList;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView);
int imageArrayId = typedArray.getResourceId(R.styleable.CustomView_imageList, 0);
if (imageArrayId != 0) {
TypedArray imageTypedArray = getResources().obtainTypedArray(imageArrayId);
imageList = new ArrayList<>();
for (int i = 0; i < imageTypedArray.length(); i++) {
int resourceId = imageTypedArray.getResourceId(i, 0);
if (resourceId != 0) {
imageList.add(resourceId);
}
}
imageTypedArray.recycle();
}
typedArray.recycle();
}
// ...
}
在上述示例中,我们定义了一个名为 imageList
的属性,其类型为 reference
,表示它可以接收一组图片资源。在自定义 View 的构造函数中,我们获取到该属性值的资源 ID,并使用 obtainTypedArray()
方法来获取到 TypedArray
,然后遍历该数组获取每个图片资源的 ID,并将其添加到 imageList
中。最后,记得在使用完 TypedArray
后进行回收(recycle()
)。
通过以上步骤,你就可以在 XML 中为自定义 View 指定一组图片资源了:
<com.example.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:imageList="@array/my_images" />
请确保在 res/values/arrays.xml
文件中定义 my_images
数组资源,并在其中指定每个图片资源的 ID:
<resources>
<array name="my_images">
<item>@drawable/image1item>
<item>@drawable/image2item>
<item>@drawable/image3item>
array>
resources>
这样,在自定义 View 中就可以使用 imageList
属性中的图片资源了。
需要注意的是,属性 attr
只能接收资源 ID,而不是直接的图片对象。因此,你需要在 XML 中指定资源 ID,并在代码中根据这些 ID 获取实际的图片资源。
在 Android 的自定义 View 中,属性(attr
)通常用于接收基本类型的值,如整数、布尔值、颜色等。然而,如果你想传入一组字符串(String
),可以使用字符串数组(String[]
)的形式来实现。
以下是一个示例,展示如何定义一个接收一组字符串的自定义属性:
res/values/attrs.xml
文件中定义属性:<resources>
<declare-styleable name="CustomView">
<attr name="stringArray" format="string" />
declare-styleable>
resources>
public class CustomView extends View {
private String[] stringArray;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView);
int stringArrayId = typedArray.getResourceId(R.styleable.CustomView_stringArray, 0);
if (stringArrayId != 0) {
stringArray = getResources().getStringArray(stringArrayId);
}
typedArray.recycle();
}
// ...
}
在上述示例中,我们定义了一个名为 stringArray
的属性,其类型为 string
,表示它可以接收一组字符串。在自定义 View 的构造函数中,我们获取到该属性值的资源 ID,并使用 getStringArray()
方法来获取到字符串数组。最后,记得在使用完 TypedArray
后进行回收(recycle()
)。
通过以上步骤,你就可以在 XML 中为自定义 View 指定一组字符串了:
<com.example.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:stringArray="@array/my_strings" />
请确保在 res/values/arrays.xml
文件中定义 my_strings
字符串数组资源,并在其中指定每个字符串:
<resources>
<string-array name="my_strings">
<item>String 1item>
<item>String 2item>
<item>String 3item>
string-array>
resources>
这样,在自定义 View 中就可以通过 stringArray
属性获取到传入的一组字符串了。
需要注意的是,属性 attr
只能接收资源 ID,而不是直接的字符串数组对象。因此,你需要在 XML 中指定字符串数组的资源 ID,并在代码中根据这个 ID 获取实际的字符串数组。