내일배움캠프 17일차

김재현·2024년 3월 20일

강의 3주차 4주차를 듣고 실습하면서 배워보았다.

UI

  • UI의 구성 기본 단위는 뷰(view)로 레이아웃과 위젯으로 이루어져있으며 xml을 사용하여 UI를 설계한다.

  • view는 모든 UI 컴포넌트들의 부모 클래스로 view클래스의 속성은 모든 UI컴포넌트들에서 공통적으로 사용 가능하다.

  • 휴대폰의 다양한 해상도에 대응하기 위하여 위젯 size는 dp를 보통 사용하고 각 해상도에 맞는 이미지 크기를 따로 저장해둔다.

레이아웃

  • 레이아웃은 5종류가 있다.
  1. Linear Layout
  • 컨테이너에 포함 된 뷰들을 수평 또는 수직으로 일렬 배치하는 레이아웃이다.
  1. Relative Layout
  • 뷰를 서로 간의 위치 관계나 컨테이너와의 위치 관계를 지정하여 배치하는 레이아웃이다.
  1. Table Layout
  • 표 형식으로 차일드를 배치하는 레이아웃이다.
  1. Frame Layout
  • 컨테이너에 포함된 뷰들을 전부 좌상단에 배치하는 레이아웃이다.
  1. Constraint Layout
  • 제약 조건을 사용해 화면을 구성하는 방법을 가진 레이아웃이다.
  • 가장 많이 쓰이는 건 Linear와 Constraint, Relative라고 한다.

  • 다음 예제를 직접 만들어보는 실습을 해보았다.

  • 첫번째 레이아웃은 Linear를 사용했고 정렬하기에 간편하고 왜 많이 쓰이는지 알 수 있었다.

  • 두번째 레이아웃은 Relative를 사용했는데 처음 사용해봐서 각 버튼의 배치가 좀 어려웠다.

  • 세번째 레이아웃은 Constraint를 사용했는데 제일 익숙해서 수월하게 진행되었다.

    원래는 constraintTop_toBottom과 같은 코드를 사용해 만드는게 어려웠는데

    첫번째로 나온 Top이 해당 위젯의 상단이고 두번째로 나온 Bottom이 다른 위젯의 하단이라고

    생각하니 조금 쉬웠다. BUTTON8의 왼쪽(Start)는 BUTTON7의 오른쪽(End)에 붙어야 하므로

<Button
	android:id="@+id/btn_8"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
    android:text="BUTTON8"
    android:layout_marginStart="20dp"
    app:layout_constraintStart_toEndOf="@id/btn_7"
    app:layout_constraintTop_toTopOf="@id/btn_7"
    app:layout_constraintBottom_toBottomOf="@id/btn_7" />

다음과 같이 위치를 조정해줄 수 있다. (constraint는 3가지이상 위치를 조정해줘야 에러가 안난다!)

안드로이드 4대 컴포넌트★

안드로이드 애플리케이션은 주로 네 가지 주요 컴포넌트로 구성됩니다. 이들은 애플리케이션의 구조를 정의하고, 안드로이드 시스템과 어떻게 상호 작용하는지를 결정합니다.

1. 액티비티 (Activity)

  • 설명: 액티비티는 사용자가 직접 상호작용하는 화면을 말합니다. 예를 들어 이메일 앱에서는 이메일 목록을 보여주는 화면, 이메일 작성 화면 등이 각각 독립된 액티비티입니다.
  • 역할: 사용자 인터페이스(UI)를 담당하며, 사용자의 입력에 반응하는 이벤트 기반 프로그래밍을 가능하게 합니다.

2. 서비스 (Service)

  • 설명: 서비스는 백그라운드에서 오랜 시간 동안 실행되어야 하는 작업을 수행합니다. 예를 들어 음악 재생이나 파일 다운로드 등이 서비스로 처리됩니다.
  • 역할: 사용자가 직접적으로 인지하지 못하는, 애플리케이션의 '백스테이지'에서 일어나는 작업을 담당합니다.

3. 브로드캐스트 리시버 (Broadcast Receiver)

  • 설명: 브로드캐스트 리시버는 안드로이드 시스템으로부터 발송되는 다양한 이벤트나 정보를 애플리케이션이 받을 수 있게 해주는 컴포넌트입니다. 예를 들어, 배터리 부족 경고, 화면 꺼짐 등의 시스템 이벤트를 처리할 때 사용됩니다.
  • 역할: 애플리케이션은 브로드캐스트 메시지를 구독하고, 해당 이벤트가 발생했을 때 반응할 수 있습니다.

4. 콘텐트 프로바이더 (Content Provider)

  • 설명: 콘텐트 프로바이더는 애플리케이션 간의 데이터 공유를 가능하게 합니다. 예를 들어, 연락처 애플리케이션이 다른 애플리케이션에 연락처 데이터를 제공할 때 사용됩니다.
  • 역할: 데이터를 저장하고 관리하는 일종의 데이터베이스 역할을 하며, 다른 애플리케이션에 안전하게 데이터를 공유합니다.

이 4대 컴포넌트를 이해하는 것은 안드로이드 애플리케이션의 기본적인 구조를 파악하는 데 매우 중요합니다. 각 컴포넌트는 독립적인 기능을 가지면서도 서로 긴밀하게 연동되어, 복잡하고 다양한 기능의 애플리케이션을 만들 수 있는 기반을 제공합니다.

액티비티(Activity)

  • 액티비티는 안드로이드 애플리케이션의 핵심 구성 요소로서 사용자가 직접 상호 작용하는 창을 의미한다. 각 액티비티는 독립적인 화면으로서 사용자에게 다양한 작업을 수행할 수 있는 인터페이스를 제공합니다.

  • 각 액티비티는 인텐트(Intent)를 통해 다른 앱 구성요소로 작업을 요청 할 수 있다.

  • 첫번째 액티비티의 UI를 구성하고 그 UI에서 버튼을 findVewById로 호출한뒤

    setOnClickListener(버튼을 눌렀을때 동작)가 두번째 액티비티를 불러온다.

  • 버튼을 누르면 다음과 같이 두번째 액티비티가 켜지고 마찬가지로 호출을 통해 닫기 버튼을 누르면

    finish() 될 수 있도록 설정해준 모습이다.

암시적 인텐트

  • 암시적 인텐트로 다른 액티비티를 시작할 수도 있는데
 <Button
	android:id="@+id/buttonDialActivity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="다이얼 작업 시작하기"
    android:onClick="doOnBtnClick" />

xml 파일에서 android:onClick="doOnBtnClick" 문장을 넣어주고

  • fun doOnBtnClick 함수를 통해 각 버튼을 클릭시 ACTION_DIAL(전화)로 이동할 수 있도록

    Uri.parse("tel:114")는 114로 전화를 걸 수 있도록 설정할 수 있다.

    똑같이 아래는 지도를 연동한 모습이다.

  • 다음은 첫번째 액티비티에서 EditText에 입력한 데이터를 세번째 액티비티로 보내주는 모습이다.


첫번째 액티비티에서 intent로 edit_text에 적힌 값을 세번째 액티비티로 보내주면


세번째 액티비티에서 다음과 같이 받아서


출력해주는 모습이다.

  • 이렇게 3주차 4주차 강의를 정리해보고 실습해보았다.

    constraint 레이아웃을 잘 알게되어 좋았고(아직 써볼 기능이 많지만) intent를 자세히 알 수 있어

    좋았다!

하루의 마무리

  • 오늘은 강의 듣고 과제도 시작해보려고 했는데 생각보다 실습내용이 좀 있어서 집중하다보니

    시간이 좀 오버됐다 ㅠㅠ 과제도 하고 스탠다드반 과제도 진행해야해서 부지런하게 움직여야겠다!

0개의 댓글