[안드로이드] 문자열로 리소스 ID 및 리소스 획득
카테고리 없음
2017. 4. 4. 10:49
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안드로이드에서 리소스(Resource)는 /res 폴더에 xml 파일로 정의하고 코드 상에서 R 클래스를 통해서 호출하여 사용한다.
- res/strings.xml 에 hello_world라는 리소스 이름을 정의
HELLO WORLD
- src/MainActivity.java 에서 R 클래스에 정의된 리소스 ID를 사용
protected void onCreate(Bundle savedInstanceState) { String msg = getResources().getString(R.string.app_description); // 또는 String msg = getString(R.string.app_description); }
위와같이 안드로이드에서 기본적으로 제공하는 방법외에 리소스 이름 (문자열)을 가지고 리소스 ID 직접 구할 수 있다.
- src/MainActivity.java 에서 리소스 이름(문자열)을 이용한 리소스 ID 구하여 사용
protected void onCreate(Bundle savedInstanceState) { String resName = "hello_world"; String type = "string"; String packageName = getPackageName(); int resId = getResources().getIdentifier(resName, type, packageName); String msg = getResources().getString(resId); }
getIdentifier 메소드의 인자 값들은 name, type, packageName 이며, 이 값들은 아래와 같다.
- name 은 R.type.name에서 name 부분을 말한다.
- type 은 R.type.name 에서 type 부분을 말한다.
- packageName 은 context 객체에서 getPackageName() 메소드로 획득한 패키지명을 말한다.
이 같은 코드는 주로 리소스 이름을 조합하여 리소스 ID 값을 획득하여 사용할 때 사용된다.
예를 들어, 연속되는 ImageView 를 img_view_1, img_view_2, img_view_3, img_view_4 로 정의하고 ImageView에 보여질 이미지 리소스를 img_1, img_2, img_3, img_4 로 정의한다면 다음과 같이 코드를 구현할 수 있다.
private void init() { int resId; String packageName = getPackageName(); for (int i = 0 ; i < 4 ; i++) { int resId = getResources().getIdentifier("img_"+i, "drawable", packageName); int viewId = getResources().getIdentifier("img_view_"+i, "id", packageName); (findViewById(viewId)).setImageResource(resId); } }