C++ 프로그램 개발자라면 윈도우 다이얼로그에서 특정 컨트롤을 수정하려면 먼저 해당 아이템을 GetDlgItem 함수를 통해 찾고 그 다음에 해당 컨트롤의 상태를 바꾸거나 텍스트를 변경하는 작업을 한다. 안드로이드에서도 findViewById 함수를 통해 해당 컨트롤에 접근하기 위한 클래스 정보를 얻고, 획득한 클래스 정보에 기반하여 컨트롤의 다양한 속성을 변경한다.
findViewById로 검색하기 위해서는 GLE(Graphical Layout Editor)에서 레이아웃이나 컨트롤에 Assign ID로 ID를 할당하거나, Edit ID로 원하는 ID를 부여해야한다.
위의 그림을 보면 새로 추가한 LinearLayout이 기본적으로는 ID가 부여되지 않는데, 오른쪽 마우스 팝업 메뉴에서 Assign ID로 ID를 부여하면 레이아웃에 대한 속성을 어플의 실행중에 수정할 수 있다.
뷰나 위젯들에 대한 ID 설정을 하고 파일을 저장해 놓으면 위의 그림과 같이 이클립스 액티비티 코드 수정시 R.id.까지 입력해도 연관된 id를 자동적으로 보여주어 손쉽게 선택할 수 있도록 돕는다. 또한 그림에도 나와 있지만 코딩중에 Ctrl+Space 키를 클릭하면 지금까지 입력한 단어로 시작하는 것을 보여주어 외우거나, 모두 입력하지 않아도 손쉽게 코딩할 수 있도록 한다.
속성을 변경하기 위해서는 먼저 클래스 정보를 찾아와야 하는데, 위의 그림과 같이 클래스명 인스턴스명 = (클래스명 캐스팅)findViewById(아이디);와 같이 사용하고 실제 속성을 변경할 때는 인스턴스명.함수명(속성값)의 형태로 사용한다. 특정 뷰 내부에 있는 컨트롤을 검색할 때는 뷰명.findViewById()와 같은 방식으로 사용한다. 아래의 코드는 텍스트 컨트롤, 편집창, 버튼을 쌍으로 좌우에 각각 두고 버튼을 클릭하면 편집창의 내용을 텍스트 컨트롤에 표시하는 예제이다.
final TextView leftText = (TextView) findViewById(R.id.left_text); final TextView rightText = (TextView) findViewById(R.id.right_text); final EditText leftTextEdit = (EditText) findViewById(R.id.left_text_edit); final EditText rightTextEdit = (EditText) findViewById(R.id.right_text_edit); Button leftButton = (Button) findViewById(R.id.left_text_button); Button rightButton = (Button) findViewById(R.id.right_text_button);
매우 유익한 내용이었습니다...