본문 바로가기

JAVA & Android

안드로이드 - getResources()메소드를 이용한 레이아웃 리소스의 버튼 초기화


1. 이클립스를 실행하여 안드로이드 프로젝트를 선택한후 아래를 참조하여 프로젝트를 생성한다.
 - 프로젝트명 : Exam_ResourcesId
 - 빌드타겟 : Android 4.0.3(API Leve : 15)
 - 패키지이름 : com.exam_resourcesid

2. main.xml에서 버튼을 하나 삽입한다.

B저장을 하여야 한다.

3. gen > com.exam_resources안에 있는 "R.java"화일을 열어본다.

Integer형으로 선언된 button1의 값이 "0x7f050000"이라는 것을 확인합니다.

4. 아래와 같이 코드를 기입합니다.
[코드]
int getId = getResources().getIdentifier("button1", "id", "com.exam_resourcesid");
String idValue = Integer.toString(getId, 16);
Toast.makeText(Exam_ResourcesIdActivity.this, idValue, Toast.LENGTH_SHORT).show();

토스트 노티피케이터를 이용하여 값을 출력하는 것이라 역시 android.widget.Toast를 임포트 한다. 코드를 그냥 입력하는 방법도 있으나, 전시간 안내해드린 것처럼 Toast문자열 위에서 Ctrl+Shift+O 단축키를 이용하는 방법을 이용하시면 쉽게 추가 가능합니다.
[코드설명]
14번 라인 - getResources().getIndentifier메소드를 이용하여 com.exam_resourcesid의 패키지안에 
                button1의 id값을 Integer형 getId변수에 저장한다.
15번 라인 - Integer형으로 받은 값이므로 문자형으로 사용하기 위해서 데이터의 형식변환인 형변형을 한다. 
                이때 R.java에서 확인했던 값이 Hex(16진수)이므로 16진수로 변환하여 문자형 idValue변수에
                담는다.
16번 라인 - 토스트 노티피케이션을 이용하여 문자형으로 변환된 idValue값을 출력하여 준다.

5. 이제 실행하여 토스트로 출력되는 팝업의 값이 R.java화일에서 봤던 그 값이 맞게 출력되는 것인지를 확인해봅니다.

값이 동일하게 출력되었다면 성공.
getResources().getIndentifier로 레이아웃 리소스 객체의 ID값을 가져올 수 있음을 확인하였다.

6. 이번엔 "main.xml"에 버튼을 5개 추가하여 보자.


6. 다시 gen > com.exam_resources안에 있는 "R.java"화일을 열어본다.

추가한 버튼들의 id 값이 순차적으로 1씩 증가된 것을 확인할 수 있다.

7. 조금전 작성한 코드는 주석 처리하고, 아래에 새로운 코드를 작성해보겠다.
[코드]
for(int i=1;i<=6;i++) {
    int getId = getResources().getIdentifier("button"+i, "id", "com.exam_resourcesid");
    ((Button)findViewById(getId)).setText("버튼"+i);
}

[설명]
18번 라인 - 반복문 for를 이용하여 버튼의 갯수만큼 반복을 하도록 지시
19번 라인 - Integer형 getId에 버튼의 id값을 담는다.
20번 라인 - getId에 담은 버튼의 ID값을 이용하여, ID에 해당하는 버튼의 텍스트를 변경한다. 
                android.widget.Button도 import해야 한다.
 이클립스를 이용한 코딩에서의 주석처리는 코드라인 맨 앞에 //(슬래쉬 두번)을 삽입하여 주는 방법이 있지만 단축키를 이용하는 방법은 주석처리를 하고자 하는 코드에서 Ctrl+/(슬래쉬)를 눌러주면 주석처리되며 여러줄을 블럭으로 지정하고 Ctrl+/를 할 경우 여러줄의 코드를 한번에 주석으로 설정할 수 있다.
 주석 해제는 Ctrl+/(슬래쉬)를 다시 한번 눌러주는 것이다.

8. 실행하여 본다. 아래와 같은 결과가 나온다면 성공한 것이다.