일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 수명주기
- IOS
- RecyclerView
- 서비스
- Swift
- 테이블_레이아웃
- textview auto scroll
- 스낵바
- 상대 레이아웃
- 텍스트뷰 스크롤
- 드로어블
- 코틀린
- 자바
- 프로젝트
- 안드로이드_프로그래밍
- 텍스트뷰 자동 스크롤
- 액션바
- 부스트코스
- 안드로이드
- 아이폰
- SceneDelegate
- 제약 레이아웃
- 안드로이드 스튜디오
- 프로그래밍
- 리니어 레이아웃
- 레이아웃
- 코드리뷰
- 데이터베이스
- 뷰
- edwith
- Today
- Total
듀다의 성장개발로그
[부스트코스] 안드로이드 프로그래밍 00 - 뷰와 레이아웃 본문
안녕하세요 듀다입니다.
저희 학교 컴퓨터연구회 KCA에서 부스트코스 서포터즈 BOOSTER 2기에 지원하게 되었는데요.
그 활동의 일환으로 이 '안드로이드 프로그래밍'으로 인사드리게 되었습니다.
부스트코스 서포터즈 BOOSTER는
부스트코스를 통해 자신이 관심 있는 분야를 학습하고 블로그에 학습한 내용을 기록하여 부스트코스도 알리고 자신의 성장도 공유하는 온라인 홍보 대외 활동입니다.
성장개발로그라는 이름에 걸맞게 이 작은 블로그를 어엿한 개발로그로 성장시키도록 노력하겠으며,
그 과정에서 이 부스트코스가 저의 엔진이 될 수 있도록 열심히 활동하겠습니다.
안드로이드 프로그래밍 포스팅은 단말기에 보이는 화면을 어떻게 만드는지에 대해서부터 시작하겠습니다.
오늘 다룰 ‘뷰’라는 것도 바로 화면에 관련된 개념입니다.
뷰(View)
뷰는 화면 안에 들어가는 각각의 화면 구성요소입니다. 글자, 그림 등 안드로이드 단말기의 화면에 보이는 것이 포함됩니다.
화면 안에 들어가는 것들을 전부 뷰라고 부른다고 이해하셔도 무방하겠습니다.
예를 들면, 안드로이드 단말기의 화면에 글자가 보인다고 가정합시다. 이 글자가 바로 텍스트 뷰를 통해 표시되는 것입니다.
뷰 그룹과 상속
뷰는 마치 그릇처럼, 담는다는 개념이 존재합니다. 뷰들을 여러 개 담아 놓고 있는 것이 바로 '뷰 그룹'입니다.
이 뷰 그룹은 상속으로 뷰의 속성을 가져오는데요,
뷰 그룹이 뷰를 상속하기 때문에 뷰 그룹은 하나의 뷰가 될 수 있습니다.
뷰 그룹이 뷰가 될 수 있기 때문에 뷰 그룹 안에는 뷰 그룹이 들어갈 수 있습니다.
또한 그 뷰 그룹 안에 또 다시 뷰가 들어갈 수도 있습니다.
결국 뷰 안에는 뷰가 들어갈 수 있습니다.
다시 설명해볼까요? 뷰 그룹은 뷰를 담을 수 있습니다. 뷰를 담고 있는 뷰 그룹을 연상해봅시다.
그런데 뷰 그룹 또한 뷰입니다. 뷰 그룹이 뷰를 상속하고 있기 때문이지요.
그렇다면 뷰를 담고 있는 이 뷰 그룹도 뷰라고 할 수 있는 것이며, 뷰가 뷰를 담고 있는 상황이라고 말할 수 있는 것입니다.
만약 이 뷰가 담고 있는 뷰도 뷰 그룹이라면, 그 안에 또 다른 뷰를 담을 수도 있을 것입니다.
위젯과 레이아웃
뷰 중에서 눈에 보이는 것을 '위젯'이라고 합니다.
위젯이라고 구분하여 부르는 이유는 뷰 그룹도 결국 뷰이기 때문에 눈에 보이는 뷰를 명확하게 구분하기 위함입니다.
'레이아웃'은 다른 뷰들을 담아놓는 것 뿐 아니라 배치하는 역할도 하는 구성요소입니다.
여기서 배치란? 새로 뷰를 담으면 그것의 위치를 결정해주는 역할을 말합니다.
레이아웃도 뷰이기 때문에 레이아웃 안에는 뷰가 들어갈 수 있습니다. 앞에서 설명한 뷰 안에 뷰가 들어가는 개념을 떠올리면 이해하기 쉽습니다. 두 개 이상의 레이아웃이 들어가면 영역을 나눠서 들어가게 됩니다.
뷰의 크기 속성
그럼 이번에는 뷰의 크기 속성을 설명해 볼까요? 여기 하나의 버튼이 있습니다. 위의 계층도에서 보이는 것처럼 텍스트 뷰를 상속받은 버튼입니다.
이 버튼은 화면에 보이기 위해서 width(가로 길이), height(세로 길이)라는 '필수 속성'이 필요합니다.
여기서 필수 속성이란 반드시 있어야 하는 속성을 의미하는데요, '필수'이기 때문에 필수 속성을 명시한 코드가 없다면 문법 오류가 발생합니다.
width와 height에 들어갈 수 있는 형식은 세 가지입니다.
- 1) match_parent : 여유 공간을 채우는 것입니다. 예를 들면 가로가 match_parent 일 때 가로 길이가 화면 가득(여유 공간까지 모두) 채워지게 됩니다.
- 2) wrap_content : 뷰에 들어 있는 내용물의 크기에 따라 뷰의 크기가 결정됩니다. 이미지가 들어간다고 가정하면 이미지(내용물)의 크기에 딱 맞춰서 크기가 고정됩니다.
- 3) 크기 값 고정 : 하나의 고정된 값을 입력하여 크기를 지정하는 것입니다. px, dp, mm등의 단위도 함께 입력하는데요, 단위에 주의하여 사용해야 합니다.
여기서 dp란? 밀도 독립적 픽셀로서, 1인치 당 160개의 점이 있는 160dpi화면을 기준으로 한 픽셀을 할당하는 상대적인 단위입니다.
320dpi에서 1dp는 2픽셀이 되겠죠. dp로 설정하는 이유는 단말기마다 해상도가 제각각이기 때문에, 화면 상에서 보이는 비율을 고려하여 구성 요소의 크기를 결정하기 위해서 사용합니다. 즉 다른 단말기에서도 비슷한 크기로 보이게 하기 위해서라고 할 수 있죠.
이 버튼은 텍스트뷰를 상속받았기 때문에 버튼의 기본 속성 외에도 텍스트 뷰의 속성까지, 다양한 속성을 가지고 있습니다.
그리고 텍스트뷰를 상속받았기 때문에 버튼을 텍스트뷰라고 말할 수 있습니다. 이 버튼도 결국 텍스트뷰의 속성을 가진 하나의 텍스트뷰에 속하니까요. 그렇지만 버튼 고유의 속성도 존재하기 때문에 텍스트뷰를 버튼이라고 할 수는 없습니다.
첫번째 포스팅은 여기서 마무리하도록 하겠습니다. 프로그래밍 관련 대외활동은 처음이라 긴장을 많이 했는데 첫 강의에서부터 상세하게 설명해주신 덕에 그렇게 막막하지만은 않겠다는 생각이 들었습니다. 이 부스트코스가 앞으로도 많은 도움이 되리라 기대합니다. 부스트코스와 함께 성장하는 모습 보여드리고 싶습니다.
부스트코스에 관한 더욱 자세한 사항은 링크를 참조하세요. 아래의 그림을 클릭하면 부스트코스 안드로이드 프로그래밍 페이지로 연결됩니다. 감사합니다.
'안드로이드 > 부스트코스' 카테고리의 다른 글
[부스트코스] 안드로이드 프로그래밍 03 - 제약 레이아웃과 상대 레이아웃 (0) | 2020.02.03 |
---|---|
[부스트코스] 안드로이드 프로그래밍 02 - 뷰와 레이아웃 (0) | 2020.02.03 |
[부스트코스] Tip! imports on the fly를 활성화해야 하는 이유 (0) | 2020.02.03 |
[부스트코스] Tip! AMD CPU에서 안드로이드 스튜디오 AVD 사용하는 방법 (0) | 2020.02.03 |
[부스트코스] 안드로이드 프로그래밍 01 - 설치부터 실행까지 (0) | 2020.02.03 |