UI 구성을 레이아웃 XML로 작성할 떄 뷰 태그에 다양한 속성을 추가할 수 있으며, 속성들은 뷰에 따라 다르다.
이번 시간에는 모든 뷰에 공통으로 지정할 수 있는 중요 속성들을 설명해 보겠다.
이때 레이아웃 XML에 TextView를 사용하는 예를 보여 뷰의 중요 속성을 설명할 것이다.
① id 속성
이는 뷰의 식별자 속성이다. 필수 속성은 아니며 필요 시 추가할 수 있다.
화면에 뷰의 내용을 출력만 하는 목적이라면 id 속성을 생략해도 상관이 없다.
하지만 id 속성이 없다면 레이아웃 XML에 등록하여 자동으로 생성된 뷰 객체룰 자바 코드에서 이용할 수 없다.
즉, 뷰 객체를 자바 코드에서 획득하여 속성 변경 등의 작업을 수행할 수 없다. 뷰 객체를 자바 코드로 직접 생성한게 아니여서 객체명을 알 수 없기 때문이다.
결국, 레이아웃 xml에 등록하여 자동으로 생성된 객체를 자바 코드에서 식별할 방법이 필요한데, 이때 이용하는 속성이 id다.
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello"/>
위의 코드처럼 android:id="@+id/myText" 라고 설정하면 개발자가 임의이 이름으로 id 값을 하나 부여한 것이 된다. 이렇게 지정한 id 값은 해당 앱의 R.java 파일에 등록된다. id 값 자체가 리소스라고 할 순 없지만, 어쨌든 id 값도 R.java 파일에 등록된다. R.java 파일을 확인해보면 id변수(나의 경우 tv_text)가 하나 추가된 것을 확인할 수 있다.
이처럼 레이아웃 XML에 명시한 id 값도 R.java에 등록되므로 id 값은 개발자가 임의의 이름으로 줄 수 있지만, 자바 명명규칙을 위배할 수는 없다. 이제 자바 코드에서 뷰 객체를 획득해 이용할 수 있다.
-> 그러려면 자바 코드에서 findViewById() 함수를 사용한다.
TextView textview = findViewById(R.id.tv_text);
정리 : 자바 코드에서 setContentView() 함수를 호출하면 레이아웃 XML 파일의 내용을 화면에 출력하고, XML에 정의한 객체가 자동으로 생성된다. 이렇게 생성된 객체는 R.java의 변수, 즉 XML에서 등록한 id 값을 매개변수로 하여 findViewById() 함수로 획득해서 사용할 수 있다.
② layout_width, layout_height 속성
이들의 속성값은 match_parent, fill_parent, wrap_content, 100px 등이 있다.
이때, match_parent와 fill_parent는 의미상 동일하다. 화면을 꽉 채우게 결정하라는 뜻이다.
wrap_content는 해당 뷰의 내용을 화면에 보이기 위한 적절한 크기를 계산해 결정하라는 의미이다.
100px처럼 수치로 뷰의 크기를 직접 결정할 수도 있다.
③ margin, padding 속성
margin은 뷰와 뷰 사이 간격을 지정하는 속성이며, padding은 뷰 내부에서 내용과 뷰의 테두리 간 간격을 지정하는 속성이다. 단일 방향의 간격만 조정하고 싶다면 다음과 같은 속성을 이용한다.
단일 margin 속성 : layout_marginLeft, layout_marginRight, layout_marginTop, layout_marginBottom
단일 padding 속성 : paddingLeft, paddingRight, paddingTop, paddingBottom
④ clickable 속성
클릭 이벤트가 발생하게 하는 속성.
⑤ visibility 속성
뷰를 화면에 출력할지 지정하는 속성. 기본값은 "true"이며, "invisible", "gone"으로 지정하면 화면에 안 보이게 할 수 있다. invisible은 화면에 보이지는 않지만 크기를 확보하며, gone으로 지정하면 크기를 확보하지 못한다.
자바코드에서는 setVisibility() 함수를 이용하여 뷰의 표시 상태를 조정한다.