R.drawable.*
XML 값 파일을 사용하여 드로어 블 리소스의 ID를 배열 내부 형태로 저장 한 다음 내 활동에서 배열을 검색하고 싶습니다.
이것을 달성하는 방법에 대한 아이디어가 있습니까?
R.drawable.*
XML 값 파일을 사용하여 드로어 블 리소스의 ID를 배열 내부 형태로 저장 한 다음 내 활동에서 배열을 검색하고 싶습니다.
이것을 달성하는 방법에 대한 아이디어가 있습니까?
답변:
폴더 내의 파일 에 다음과 같은 형식의 배열 을 사용합니다 .arrays.xml
/res/values
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer-array name="random_imgs">
<item>@drawable/car_01</item>
<item>@drawable/balloon_random_02</item>
<item>@drawable/dog_03</item>
</integer-array>
</resources>
그런 다음 활동에서 다음과 같이 액세스하십시오.
TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
// get resource ID by index
imgs.getResourceId(i, -1)
// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, -1));
// recycle the array
imgs.recycle();
에서 value
폴더 생성 xml
은 파일 이름을 arrays.xml
이 방법으로에 데이터를 추가
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
그런 다음이 방법으로 코드에 얻습니다.
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
그런 다음 예를 들어 다음 코드 를 사용하여 Drawable
이들 중 img
TypedArray
하나를 ImageView
background
사용하십시오.
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
색인 index
은 어디에 있습니까 Drawable
?
defaultValue
이 항목이없는 경우 제공하는 값입니다.index
자세한 내용 TypedArray
은이 링크 를 방문
하십시오 http://developer.android.com/reference/android/content/res/TypedArray.html
이를 사용하여 드로어 블과 같은 다른 리소스 배열을 만들 수 있습니다. 배열이 동종 일 필요는 없으므로 혼합 된 자원 유형의 배열을 작성할 수 있지만 배열에서 데이터 유형의 위치와 위치를 알고 있어야합니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="icons">
<item>@drawable/home</item>
<item>@drawable/settings</item>
<item>@drawable/logout</item>
</array>
<array name="colors">
<item>#FFFF0000</item>
<item>#FF00FF00</item>
<item>#FF0000FF</item>
</array>
</resources>
그리고 이런 활동에서 자원을 얻으십시오
Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);
TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);
즐겨!!!!!
kotlin 방법은 다음과 같습니다.
fun Int.resDrawableArray(context: Context, index: Int, block: (drawableResId: Int) -> Unit) {
val array = context.resources.obtainTypedArray(this)
block(array.getResourceId(index, -1))
array.recycle()
}
R.array.random_imgs.resDrawableArray(context, 0) {
mImgView1.setImageResource(it)
}
코 틀린에서는 다음과 같이 할 수 있습니다.
<integer-array name="drawer_icons">
<item>@drawable/drawer_home</item>
</integer-array>
다음과 같이 리소스에서 이미지 배열을 가져옵니다. TypedArray
val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
색인으로 리소스 ID를 얻습니다.
imageArray.getResourceId(imageArray.getIndex(0),-1)
또는 imageView의 리소스를 ID로 설정할 수 있습니다
imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))
마지막으로 어레이를 재활용
imageArray.recycle()
내가 아는 한 R.drawable에 배열을 저장할 수 없습니다.
config.xml 또는 strings.xml에 별칭 리소스 를 사용하여 드로어 블 리소스에 경로를 매핑하는 배열을 만들 수 있습니다 .
이것이 작동하는지 확인하고 추가 도움이 필요하면 알려주십시오.