안드로이드 스튜디오 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 - button 2 --> 버튼1 - button
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_percent | layout_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 | 뷰의 위, 아래, 왼쪽, 오른쪽을 얼마나 띄울지 한꺼번에 지정함 |