[내일배움캠프 앱트랙] 캠프 4주차 - 12/15(금)

0
post-thumbnail

[내일배움캠프 앱트랙] 캠프 4주차 - 12/15(금)

📝TIL

Kotlin CodeKata

LeetCode

안드로이드 앱 개발 입문

  • 2주차⭕

  • 3주차⭕

    • 3-1 Android UI - Widget⭕

    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 액티비티⭕

    안드로이드 4대 컴포넌트

    • (1) Activity
      • 사용자가 직접 상호작용하는 화면
      • 사용자의 인터페이스(UI) 담당, 사용자의 입력에 반응하는 이벤트 기반 프로그래밍을 가능하게 함
    • (2) Service
      • 백그라운드에서 오랜 시간동안 실행되어야 하는 작업 수행
      • 사용자가 직접적으로 인지하지 X, 앱의 백스테이지에서 일어나는 작업 담당
    • (3) Broadcast Receiver
      • 안드로이드 시스템으로부터 발송되는 다양한 이벤트나 정보를 어플리케이션이 받을 수 있게 해주는 컴포넌트
      • 애플리케이션은 브로드캐스트 메세지를 구독 -> 해당 이벤트가 발생했을 때 반응
    • (4) Content Provider
      • 애플리케이션 간의 데이터 공유를 가능하게 함
      • 데이터를 저장하고 관리하는 일종의 데이터베이스 역할

    Activity

    • 모든 Activity는 Android Manifest 파일에 등록되어야
    • 4-2 인텐트⭕

    Intent

    • 인텐트(Intent): 일종의 메세지 객체
      • 다른 앱의 구성 요소(액티비티, 서비스, 브로드캐스트 리시버)로 작업 요청
    • 인텐트 유형
      • (1) 명시적 인텐트(Explicit Intent)
        • 특정한 컴포넌트를 직접적으로 호출
      • (2) 암시적 인텐트(Implicit Intent)
        • 특정한 컴포넌트를 명시하지 않고, 수행하고자 하는 일반적인 작업을 인텐트 객체에 설정하여 호출
        • 안드로이드 시스템이 이 인텐트를 처리할 수 있는 모든 어플리케이션 검색
          -> 적합한 인텐트 필터를 가진 컴포넌트인지 검사
          -> 실행
        • 인텐트 필터: 컴포넌트가 특정 인텐트를 수신할 준비가 되어있는지 나타냄

      Intent 객체 구성 요소

      • 컴포넌트 이름: 인텐트가 전달될 대상의 이름
      • 액션(Action): 인텐트가 수행해야 할 일반적인 작업
      • 카테고리(Category): 인텐트의 유형을 더 구체적으로 지정
      • 데이터(Data): 작업을 수행하는 데 필요한 데이터의 URI
      • 엑스트라(Extra): 복잡한 데이터를 전달하기 위한 키-값 쌍

      Intent Filter

      • 본인의 앱이 수신할 수 있는 암시적 인텐트가 어느 것인지 알리기
        -> 매니패스트 파일에 <<intent-filter>> 요소 선언
    • 4-3 액티비티 생명주기⭕

    액티비티의 생명 주기

    • 수명주기 콜백 메소드: 액티비티가 생성되면서 해제될 때 까지 액티비티의 상태에 따라 불려지는 메소드
    • 액티비티의 수명: OnCreate() ~ onDestroy()
    • 액티비티의 Visibility: onStart() ~ onStop()
      • 사용자가 화면을 보고, 화면과 상호작용 가능
    • 액티비티의 forground 동작 구간: onResume()~onPause()
      • 액티비티가 화면에서 다른 모든 액티비티보다 앞에 표시되고, 사용자의 입력 집중됨

📝코멘트

profile
Be able to be vulnerable, in search of truth

0개의 댓글