Home 프로젝트를 생성하면 나오는 기본 XML 코드
Post
Cancel

프로젝트를 생성하면 나오는 기본 XML 코드

안드로이드 스튜디오 XML 기초

안드로이드 스튜디오에서 프로젝트를 만들면 아래 XML 파일이 만들어 진다.

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>  
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  xmlns:app="http://schemas.android.com/apk/res-auto"  
  xmlns:tools="http://schemas.android.com/tools"  
  android:layout_width="match_parent"  
  android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>

위의 xml 파일을 하나씩 분석해 보자.

1
  <?xml version="1.0" encoding="utf-8"?>  

첫째줄에 있는 줄은 XML 파일에 일반적으로 추가하는 정보이며,

이 파일이 XML 형식으로 된 것임을 알려준다.


1
2
<androidx.constraintlayout.widget.ConstraintLayout    
</androidx.constraintlayout.widget.ConstraintLayout>

두번째 줄과 마지막 줄에 있는 태그는 화면 전체를 감싸고 있는 최상위 레이아웃 이며,

Component Tree 창의 계층도에서 가장 위쪽에 있는걸 확인할 수 있다.

자세히 보면 ConstraintLayout 앞에 패키지 이름이 있는데 (androidx.constraintlayout.widget)

만약 위젯이나 레이아웃이 안드로이드 기본 API에 포함되어 있다면 위젯이나 레이아웃

이름만 입력하면 된다. 하지만 외부 라이브러리를 사용할 경우 위처럼 패키지 이름까지

다 적어야 한다.



네임 스페이스

1
2
3
4
5
xmlns:android="http://schemas.android.com/apk/res/android"  
  xmlns:app="http://schemas.android.com/apk/res-auto"  
  xmlns:tools="http://schemas.android.com/tools"  
  android:layout_width="match_parent"  
  android:layout_height="match_parent">

위의 xml 코드를 보면 xmlns: 이 있는데 이것을 네임 스페이스라고 하고,

XML에서는 접두사(prefix)를 이용하여 같은 이름의 충돌을 방지한다.

전역변수 이름을 중복 되게 사용하면 안되는 것처럼 비슷하게 생각하면 될 것 같다.

xmlns 앞에 android 가 있는데 이건 접두어이다.

위의 xml 코드에서 xmlns 뒤에 있는 접두어의 의미는 아래와 같다.

android, app, tools 접두어 의미

접두어의미
xmlns:android안드로이드 기본 SDK에 포함되어 있는 속성을 사용한다.
xmlns:app프로젝트에서 사용하는 외부 라이브러리에 포함되어 있는 속성을 사용한다.
xmlns:tools안드로이드 스튜디오의 디자이너 도구 등에서 화면을 보여줄 때 사용.
이 속성은 앱이 실행될때 적용되지 않고 안드로이드 스튜디오에서만 적용됨
android:id뷰를 구분하는 구분자 역할을 한다.

네임 스페이스를 사용하는 문법

1
<요소이름  xmlns:prefix="URI">


URI란?

1
2
3
4
5
6
7
8
9
URI란 통합 자원 식별자를 의미하며, 인터넷에 있는 자원을 나타내는 유일한 주소를 의미한다.

인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에도 항상 명시된다.

가장 잘 알려진 URI로는 인터넷 도메인 주소를 나타내는

URL(Uniform Resource Locator)가 있고,

또 다른 URI로는 URN(Universal Resource Name)가 있다.

URI 는 네임 스페이스 식별자이다.

제약 레이아웃에서 다른 뷰와 연결

layout_constraint[소스 뷰의 연결점]_[타킷 뷰의 연결점]="[타깃 뷰의 id]"

버튼과 버튼 2 ID를 가진 버튼 두개를 연결할 때

 graph BT
  버튼2&nbsp-&nbspbutton&nbsp2 --> 버튼1&nbsp-&nbspbutton
1
app:layout_constraintTop_toBottomOf="@+id/button" />

버튼 1 = 타깃 뷰 버튼 2 = 소스 뷰

@+id/아이디값 형식으로 사용

이외의 여러가지 속성

1
2
3
4
5
6
layout_constraintTop_toTopOf				layout_constraintLeft_toLeftOf
layout_constraintTop_BottonOf				layout_constraintLeft_toRightOf
layout_constraintBottom_toTopOf				layout_constraintRight_toTopOf
layout_constraintBotton_toBottomOf			layout_constraintRight_toBottomOf
layout_constraintLeft_toTopOf				layout_constraintRight_toLeftOf
layout_constraintLeft_toBottomOf			layout_constraintRight_toRightOf

GuidLine XML

1
2
3
4
5
6
<androidx.constraintlayout.widget.Guideline  
  android:id="@+id/guideline2"  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  android:orientation="vertical"  
  app:layout_constraintGuide_begin="20dp" />

layout_constraintGuid_begin -> 부모 레이아웃의 벽면에서 얼마나 떨어트려 배치할지

속성설명
layout_constraintGuid_begin세로 방향- 왼쪽부터, 가로 방향일 경우 위쪽부터 거리 지정
layout_constraintGuid_end세로 방향- 오른쪽부터, 가로 방향일 경우 아래쪽부터거리 지정
layout_constraintGuid_percentlayout_constraint_begin 속성 대신 % 단위로 거리 지정

제약 조건을 설정하는 속성은 외부 라이브러리 속성이므로 앞에 모두 app: 접두어가 붙어있다.

Button XML

1
2
3
4
5
6
7
 <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        tools:layout_editor_absoluteX="135dp"
        tools:layout_editor_absoluteY="253dp" />
속성설명
text뷰에 들어갈 텍스트
layout_marginTop뷰의 위쪽을 얼마나 띄울지 지정함
layout_marginBottom뷰의 아래쪽을 얼마나 띄울지 지정함
layout_marginLeft뷰의 왼쪽을 얼마나 띄울지 지정함
layout_marginRight뷰의 오른쪽을 얼마나 띄울지 지정함
layout_margin뷰의 위, 아래, 왼쪽, 오른쪽을 얼마나 띄울지 한꺼번에 지정함
This post is licensed under CC BY 4.0 by the author.