2주차⭕
3주차⭕
View
- 뷰(View): 안드로이드 앱의 UI를 구성하는 기본 단위
- 위젯(Widget): View의 서브 클래스, 앱 화면을 구성하는 시작적인 모양을 가진 UI 요소
- 레이아웃(Layout): ViewGroup의 서브 클래스, 다른 뷰(위젯or레이아웃)을 포함하여 정렬하는 기능
- Object > View > ViewGroup
- View: 모든 UI 컴포넌트들의 부모 클래스
- ViewGroup: a special view that can contain other views
Units of measurement
- px(pixels), in(inches), mm(millimeters)
(px: 디스플레이의 해상도에 따라 view 크기 달라보일 수 있음. 저해상도일 때, 고해상도일 때보다 더 커보임)- dp(density-independent pixels): 밀도에 독립적인 단위
- 1dp = 160dpi 화면에서의 1px
(160dpi인 화면에서 100dp = 100px)
(320dpi인 화면에서 100dp = 200px)다양한 스마트폰 해상도 대처하기
- dpi(dotsperinch): Android Screen Densities
- IDPI(120dpi)
- MDPI(160dpi)
- HDPI(240dpi)
- XHDPI(320dpi)
- XXHDPI(480dpi)
- XXXHDPI(640dpi)
TextView
- TextView attributes
- typeface: 텍스트 폰트(normal, sans, serif, monspace)
- singleLine: "true"면 텍스트가 위젯의 폭보다 길 때 강제로 한 줄에 출력
EditText
- EditText: TextView의 서브 클래스
- EditText attributes
- TextView의 모든 attribute
- inputType: 입력 시 허용되는 키보드 타입/행위 설정
- 키보드 타입: text, phone, textEmailAddress
- 키보드 행위: textCapWords(문장 시작 대문자로 변환), textAutoCorrext, TextMultiLine(여러 줄 입력받기)
background
- 뷰의 배경 지정으로 여러가지 객체(색상, 이미지 등)로 지정 가능
- 색상 지정 시 형식: #RGB, #ARGB, #RRGGBB, #AARRGGBB
Button
- Button: TextView의 서브 클래스
- 버튼 내 텍스트/아이콘 표시 가능
- 버튼 전체를 이미지로 하기 위해선 ImageButton 사용
- 버튼 클릭 이벤트 처리:
- 방법(1) xml에서 버튼의 onClick 속성에 메소드 이름 설정
- 방법(2) 이벤트 처리 객체(View.OnCLickListner 인터페이스 구현 객체) 등록
findViewByID()
- Activity 클래스에 정의된 메소드 -> Activity의 하위 클래스(ex. AppCompatActivity)에서 사용 가능
- onCreate() 메소드 내의 setContentView()를 통해 연결된 XML 리소스 요소 중에서만 검색 가능
ImageView
- ImageView 사용 방법: 이미지 Drawable 리소스에 추가 -> ImageView의 src 속성에 Drawble 리소스 ID 추가
- Drawble 리소스: .jpg, .png 가능
- 해상도에 따른 이미지는 별도의 폴더 생성(ex. drawable-xhdpi) 후 저장
- 이미지 파일 명: 한글 X, 대문자 X, 숫자로 시작 X
- ImageView의 영역에 맞게 이미지 확대/축소 -> scaleType 속성
- center: 이미지의 크기와 비율 유지하며 중앙에 배치
(이미지가 영역보다 클 경우, 잘릴 수 있음)- centerCrop: 이미지의 비율을 유지하며, 가로 세로 중 짧은 쪽이 영역에 맞게 출력
(이미지가 영역보다 클 경우, 잘릴 수 있음)- fitCenter: 이미지의 비율을 유지하며, 가로 세로 중 긴 쪽이 영역에 맞게 출력, 영역의 남은 공간은 background 색으로 채워짐
- centerInside: fitCenter와 유사하지만, 이미지가 영역보다 작은 경우, 이미지의 크기 유지
- fitStart: fitCenter와 유사하지만, 왼쪽 상단에 맞춰 출력
- fitEnd: fitCenter와 유사하지만, 우측 하단에 맞춰 출력
- fitXY: 이미지의 비율을 무시하고 영역에 맞춰 출력
- matrix: 이미지의 비율을 유지하며, 왼쪽 상단에 맞춰 출력
(이미지가 영역보다 작은 경우, 이미지 크기 유지)
(이미지가 영역보다 클 경우, 잘릴 수 있음)실무에서의 ImageView 사용
- 이미지 버튼
- ImageView의 Cliackable 속성 true로 설정
- 3가지 이미지(normal, pressed, disable) 준비
- 해상도 처리를 위해 dpi별 5개 이미지(hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi) 준비
-> 1개의 이미지 버튼을 위해 총 15개의 이미지 준비해야- 9-patch 이미지
- ImageView는 해상도와 화면 모드(가로모드/세로모드)에 따라, 이미지 필요
-> 이미지의 특정 영역은 원본 이미지 그대로 표시되도록 만들고, 이미지의 내용이 표시되는 영역을 버튼의 크기에 따라 늘어나게 만들기- 9-patch image: 이미지에서 원본 크기 그대로 표시되어야 할 영역과, 늘어날 수 있는 영역(stretchable) 영역을 구분하여, 크기가 늘거나 줄을 수 있도록 만들어진 이미지
- 3-2 Android UI - Layout⭕
Linear Layout
- 컨테이너에 포함된 뷰들을 수평/수직으로 일렬 배치하는 레이아웃
- 자식 뷰들은 중첩(overlap)되지 않고 쌓인다(stack)
- 자식 뷰들의 영역 가중치 설정 가능 -> layout_weight 속성
Relative Layout
- 컨테이너에 포함된 뷰들을 서로간의 위치 관계나 컨테이너와의 상대적인 위치 관계를 지정하여 배치하는 레이아웃
- 뷰들 서로간의 위치 관계:
- layout_alignBaseLine
- layout_alignBottom
- layout_alignTop
- layout_alignLeft
- layout_alignRight
- layout_Above
- layout_Below
- layout_toLeft
- layout_toRight
- Parent와의 위치 관계:
- layout_centerHorizontal
- layout_centerVertical
- layout_alignParentLeft
- layout_alignParentRight
- layout_alignParentTop
- layout_alignParentBottom
- 자식 뷰들에 상대적인 위치 관계를 지정하지 않은 경우, 중첩되어 표시됨
Table Layout
- 컨테이너에 포함된 뷰들을 표 형식으로 배치하는 레이아웃
- 표를 구성하는 행: TableRow
FrameLayout
- 하나의 자식 뷰만 표시할 때 사용하는 레이아웃
- 여러 개의 자식 뷰를 추가하면, 중첩되어 표시되며, 가장 최근에 추가된 뷰가 상위에 표시됨
Constraint Layout
- 제약 조건을 통해 화면을 구성하는 레이아웃
- RelativeLayout과 비슷하지만, 더 유연하고 다양한 기능 제공
- Relative Positioning
- Margins
- Centering Positioning
- Circular Positioning
- Visibility Behavior
- Dimension Constraints
- Chains
- Visual Helper Object
- 위젯의 크기 설정 -> ResizeHandle
- 위젯의 상대적인 정렬 -> SideHandle
- 위젯 내부 텍스트 위치를 기준으로 정렬 -> BaselineHandle
- Constraint 툴 바 사용하기
- Autoconnect: 위젯을 배치할 때 자동으로 이웃한 위젯과 관계 맺음
- Clear All Constraints
- Infer Constraints: 레이아웃에 배치된 모든 위젯을 현재 위치를 기반으로 괸계 맺음
- Default Margins: 위젯 간의 기본 마진 값 지정
- Guide Lines: 수평/수직 가이드라인 생성 -> 위젯을 가이드라인 기준으로 정렬 가능
Margin/Padding/Gravity
- gravity 속성: 해당 뷰 안의 내용에 대한 정렬 방식 지정
- layout_gravity 속성: 부모 뷰 안에서 해당 뷰의 정렬 방식 지정
Style & Theme
- Style: View 또는 창의 모양과 형식을 지정하는 속성 모음
- Theme: 개별 View가 아닌 전체 Activity 또는 전체 앱에 적용되는 스타일
4주차⭕
안드로이드 4대 컴포넌트
- (1) Activity
- 사용자가 직접 상호작용하는 화면
- 사용자의 인터페이스(UI) 담당, 사용자의 입력에 반응하는 이벤트 기반 프로그래밍을 가능하게 함
- (2) Service
- 백그라운드에서 오랜 시간동안 실행되어야 하는 작업 수행
- 사용자가 직접적으로 인지하지 X, 앱의 백스테이지에서 일어나는 작업 담당
- (3) Broadcast Receiver
- 안드로이드 시스템으로부터 발송되는 다양한 이벤트나 정보를 어플리케이션이 받을 수 있게 해주는 컴포넌트
- 애플리케이션은 브로드캐스트 메세지를 구독 -> 해당 이벤트가 발생했을 때 반응
- (4) Content Provider
- 애플리케이션 간의 데이터 공유를 가능하게 함
- 데이터를 저장하고 관리하는 일종의 데이터베이스 역할
Activity
- 모든 Activity는 Android Manifest 파일에 등록되어야
Intent
- 인텐트(Intent): 일종의 메세지 객체
- 다른 앱의 구성 요소(액티비티, 서비스, 브로드캐스트 리시버)로 작업 요청
- 인텐트 유형
- (1) 명시적 인텐트(Explicit Intent)
- 특정한 컴포넌트를 직접적으로 호출
- (2) 암시적 인텐트(Implicit Intent)
- 특정한 컴포넌트를 명시하지 않고, 수행하고자 하는 일반적인 작업을 인텐트 객체에 설정하여 호출
- 안드로이드 시스템이 이 인텐트를 처리할 수 있는 모든 어플리케이션 검색
-> 적합한 인텐트 필터를 가진 컴포넌트인지 검사
-> 실행- 인텐트 필터: 컴포넌트가 특정 인텐트를 수신할 준비가 되어있는지 나타냄
Intent 객체 구성 요소
- 컴포넌트 이름: 인텐트가 전달될 대상의 이름
- 액션(Action): 인텐트가 수행해야 할 일반적인 작업
- 카테고리(Category): 인텐트의 유형을 더 구체적으로 지정
- 데이터(Data): 작업을 수행하는 데 필요한 데이터의 URI
- 엑스트라(Extra): 복잡한 데이터를 전달하기 위한 키-값 쌍
Intent Filter
- 본인의 앱이 수신할 수 있는 암시적 인텐트가 어느 것인지 알리기
-> 매니패스트 파일에 intent-filter 요소 선언
액티비티의 생명 주기
- 수명주기 콜백 메소드: 액티비티가 생성되면서 해제될 때 까지 액티비티의 상태에 따라 불려지는 메소드
- 액티비티의 수명: OnCreate() ~ onDestroy()
- 액티비티의 Visibility: onStart() ~ onStop()
- 사용자가 화면을 보고, 화면과 상호작용 가능
- 액티비티의 forground 동작 구간: onResume()~onPause()
- 액티비티가 화면에서 다른 모든 액티비티보다 앞에 표시되고, 사용자의 입력 집중됨