본문 바로가기

Android/Layout

XML 레이아웃

XML 기반 레이아웃
- 각 위젯이 서로 연결되고 포함되는 관계를 XML형태로 정의
- 안드로이드는 XML 레이아웃을 리소스 파일로 인식하고, XML 레이아웃 파일은 프로젝트 내부의 res/layout 디렉토리에 보관
- 각 XML 레이아웃 파일에 정의된 엘리먼트 트리구조는 실제 화면에 나타나는 위젯과 컨테이너의 구조를 그대로 나타낸다.
- XML 엘리먼트에 지정된 속성은 위젯 속성에 연결돼 위젯이 표현되는 방법이나 컨테이너가 동작하는 방법 등을 정한다.
- ex) Button 엘리먼트에 android:textStyle="bold" 라고 지정되 있으면 해당버튼 화면표시될때 굵은 글꼴을 사용한다는 의미



XML로 레이아웃을 지정하는 이유
- 자바코드와의 독립성(자바코드와 XML레이아웃파일은 서로가 변경되더라도 서로에게 영향을 끼치지 않는다.)
- GUI 화면 디자인 프로그램에서 화면을 좀 더 쉽게 생성하고 관리하겠다는 목표



XML 레이아웃 파일구조
<? xml version="1.0" encoding=utf-8">
<Button xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/button"
  android:text=" "
  android:layout_width="fill_parent"
  android:layout_height="filee_parent"/>
- XML파일의 루트 엘리먼트는 안드로이드 XML 네임스페이스를 지정해야 한다.
 xmlns:android="http://schemas.android.com/apk/res/android"

- android:text 속성 : 버튼이 처음생성됐을 때 화면에 표시할 텍스트를 의미
- android:layout_width / android:layout_height 속성 : 자신을 포함하는 '부모parent' 엘리먼트의 폭과 너비를 그대로 사용
  (이 경우 전체화면을 의미)



엘리먼트 ID
- 자바코드에서 호출해 사용하려는 모든 엘리먼트들은 반드시 android:id 속성으로 id를 지정해야한다.
- 일반적으로 @+id/... 과 같은 아이디를 지정, ...부분에는 중복되지 않는 유일한 문자열을 지정해야 한다.
 ex) android:id="@+id/button
- 안드로이드에서는 @android:id/...와 같이 특별한 형태의 android:id값을 사용하기도 한다.



자바 코드와 연결하는 방법
- 필요한 위젯과 컨테이너를 구성해 main.xml 파일로 저장하고 res/layout 디렉토리에 보관되있다고 하면,
 그 다음으로 액티비티의 onCreate() 메소드에서 다음과 같은 코드 한 줄만 적어주면 작성한 레이아웃을 그대로 불러온다.
setContetView(R.layout.main);
엘리먼트 가운데 id를 지정한 항목 찾아오기
-  findViewById()메소드를 사용, 메소드 인자로는 찾고자 하는 위젯의 숫자 ID를 넘겨야 함.
- 위젯의 숫자 ID는 안드로이드가 자동으로 생성해 R 클래스에 반영, R.id.something으로 사용(something부분에 위젯이름)

- R.java : XML레이아웃 파일을 안드로이드 빌드시스템이 분석해 자바코드에서 호출해 쓸 수 있도록 자동 생성한 자바코드 파일
- 모든 레이아웃 정보는 R.layout 변수를 통해 접근, 레이아웃 파일이름으로(main.xml파일의 레이아웃은 R.layout.main) 접근



- 레이아웃을 XML로 분리한 프로그램은 대부분 java로만 구성된 프로그램과 동일하지만, 
 위젯의 인스턴스를 생성하지 않고, XML 레이아웃에 정의된 내용을 호출해서 사용한다는 점이 다르다.