[안드로이드] 레이아웃에 대한 리소스

반응형




읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


이번글은 레이아웃에 대한 리소스 입니다.

레이아웃에 대한 리소스


레이아웃은 XML 파일 내의 XML 엘리먼트를 사용하여 스크린의 레이아웃을 지정할 수 있습니다. 각각의 파일은 전체 스크린 또는 스크린의 일부를 포함하게 되며,
결국에는 뷰 리소스로 컴파일 됩니다.

이것은 Activity.setContentView() 메소드에 의해 전달되거나 다른 리소스 엘리먼트에서 참조할 수 있습니다.

프로젝트의 res/layout 디렉토리에 저장되며,
안드로이드의 리소스 컴파일러인 aapt에 의해 컴파일 됩니다.

모든 레이아웃 XML 파일은 하나의 루트 엘리먼트를 가집니다. 또 루트 엘리먼트는
"http://schemas.android.com/apk/res/android" 라는 네임스페이스를 가져야 하지요

XML 파일은 <?xml> 선언을 요구하며 XML 엘리먼트 중 지원되는 하나의 루트 엘리먼트를 가질 필요가 있습니다.

◎ 파일위치 : res/layout/파일명.xml
◎ 컴파일 후 리소스 타입 : View 또는 View 서브클래스의 리소스에 대한 포인터

 소스 사용 구문
소스코드 : R.layout.파일명
XML : @[package:]layout/파일명



엘리먼트와 속성


엘리먼트와 그에 대한 속성들이 아래와 같이 있습니다.

1. <ViewGroupClass>
하나의 루트 엘리먼트로서 다른 엘리먼트를 포함하는 뷰 그룹 클래스가 될 수 있고, 만약 단 하나의 객체뿐이라고 한다면 위젯이 될 수도 있겠습니다. ( 또는 커스텀 아이템이 될 수도 있겠네요 ㅎ ).

기본적으로 대소문자를 구분하는 엘리먼트로 위젯이나 뷰 그룹 클래스 이름을 쓸 수 있습니다. 이 엘리먼트 들은 대응되는 클래스에 적용하는 속성을 지원합니다.

하지만 예를들어 <ListLayout> 안에는 <TextView> 를 넣을 수 없는 것처럼 그 네이밍과 조건이 항상 일치하는 것은 아닙니다.

클래스가 다른 클래스로부터 파생되었다면, XML 엘리먼트는 파생된 엘리먼트로부터 모든 속성을 상속받게 됩니다.
예를들어, EditText 는 <EditText> 엘리먼트에 대응되는데, <TextView> 와 <View> 의 속성, 그리고 자신만의 고유한 속성까지 지원하지요.

특별히 'id' 속성에는 " @f " 구문으로 R.id 클래스에 추가하게 되는데, 숫자가 존재하지 않으면 생성하고, 존재하면 그것을 그대로 사용하는 방식을 취합니다.

ID는 XML 에서 <EditText id = "@+id/nameEdit" /> 처럼 선언한 다음, 소스코드에서 findViewById(R.id.nameEdit) 메소드를 사용하여 참조하여 사용합니다.

모든 엘리먼트는 id 값 및 xml 네임스페이스 값을 지원합니다.

id : 소스코드에서 엘리먼트에 접근할 때 쓰는 ID 값으로써, 일반적으로 @+id/name 구문을 사용합니다.

id 를 일괄적으로 생성하는 id.xml 을 특별히 만들려면
<resources><item type="id" name="string_name"/></resources>
로 간단히 만들 수 있습니다.


2. <requestFocus>
뷰 객체에 해당하는 어떤 엘리먼트는 빈(empty) 엘리먼트를 포함할 수 있습니다. 이것은 부모 태그에게 스크린 상의 초기 포커스를 제공하지요.
파일별로 이 엘리먼트는 오직 하나만 가질 수 있습니다.

그렇다면 이 엘리먼트에는 어떤 속성이 지원될까요?
우선, 안드로이드는 실행시에 XML 레이아웃 리소스를 보여주기 위하여 LayoutInflater 클래스를 사용합니다. 기본적으로 모든 위젯의 클래스 이름은 태그로 직접적으로 사용되 버립니다.
더불어 지원되는 모든 태그와 속성들의 리스트는 R.styleable 참조로 리스트 됩니다. 마찬가지겠지만 속성 이름은 완벽히 일치하지 않는것들도 있습니다.

그 이름의 밑줄(_ : 언더바) 가 있다면 그것이 바로 속성입니다.
밑줄 앞은 엘리먼트 이름입니다.

예를들어 ' EditText_autotext ' 는 <EditText> 태그가 속성으로 autoText 를 지원한다는 걸 의미하는 것이지요. 실제 그 속성들을 사용할 때엔 속성앞에 'android:' 접두어를 추가해야 겠지만요 ㅎ

음... R.styleable 의 리스트가
  TextView
  TextView_lines
  TextView_maxlines
처럼 되어있다면
<TextView android:lines="10" android:maxlines="20" /> 처럼 하나의 엘리먼트를 만들 수도 있습니다. 이렇게하면 TextView 객체를 만들고 lines 와 maxlines 속성을 설정할 것입니다.

속성으로는 세가지의 종류가 있습니다.

◎ 엘리먼트가 직접 지원하는 속성.

◎ 해당 엘리먼트의 부모 클래스에 의해 지원되는 속성. 예를들어 TextView 는 View를 상속받은 것이기 대문에 View 가 지원하는 모든 속성들을 사용할 수가 있죠.
이것들은 클래스 이름없이 사용됩니다.
paddingBottom 은 View 클래스의 속성이지만
<TextView android:paddingBottom = "10" /> 으로 사용되는 것과 일치합니다.

◎ 객체의 ViewGroup.LayoutParams 서브 클래스의 속성.
중요한 점은 모든 뷰 객체는 LayoutParams 멤버를 지원한다는 것입니다.

엘리먼트에 LayoutParams 멤버의 속성을 설정하려면
" android:layout_layoutParamsProperty " 구문을 사용합니다.
예를들어, 정렬을 위한 " android:layout_grvity" 같은 것이 있습니다.

LayoutParams 서브클래스는 상속된 속성 또한 지원합니다.

각각의 서브클래스에 의해 보여지는 속성들은
" LayoutParams서브클래스명_Layout_layout_property명 " 으로 정의하면 됩니다.

예제 : 직접 지원되는 속성, 상속된 속성, LayoutParams 속성을 사용합니다.



요건 참고할 레이아웃 Params 입니다 ㅎ

끝~~








다음글은 커스텀 레이아웃 리소스에 대한 글 입니다~



관련글





반응형

댓글

Designed by JB FACTORY