1. 오늘 한 것
① 안드로이드 UI 레이아웃(Layout) 특성 파악 및 중첩 실습
- ConstraintLayout: 뷰(View) 간의 상대적인 제약 조건(Top, Bottom, Start, End)을 연결하여 화면을 구성하는 기본 레이아웃 사용법 숙지.
- LinearLayout: 화면을 가로(horizontal) 또는 세로(vertical)로 순차 배치. weightSum과 layout_weight 속성을 사용해 화면을 4:4:2 비율로 정밀하게 분할하는 실습 진행.
- FrameLayout: 여러 뷰를 겹쳐서(Stacking) 배치. 카카오톡 알림 배지처럼 이미지(ImageView) 위에 숫자 텍스트(TextView)를 우측 상단에 겹쳐 띄우는 중첩 UI 구현.
② XML 디자인과 Java 로직의 연결 및 동적 제어
- 객체 바인딩: XML에서 부여한 ID를 Java 파일에서 findViewById() 메서드를 통해 객체로 연결.
- 텍스트 토글 기능: 버튼 객체에 setOnClickListener를 달고, getText().toString().equals()를 활용해 클릭 시 "Hello World!"와 "Good Bye~"가 번갈아 가며 출력되도록 구현.
- 이미지 동적 교체: ImageView의 scaleType="centerCrop"(비율 유지 꽉 채움) 속성을 확인하고, Java 로직에서 imageView.setImageResource(R.drawable.momoland)를 호출해 버튼 클릭 시 화면의 이미지가 동적으로 바뀌도록 구현.
③ 안드로이드 화면 생명주기(LifeCycle) 및 인텐트(Intent) 실습
- 생명주기 로그 추적: 앱이 켜지고 꺼지는 과정에서 호출되는 콜백 메서드(onCreate, onStart, onResume, onPause, onStop, onRestart)들을 오버라이딩함. 내부마다 Log.i()를 심어, 홈 버튼 클릭이나 화면 복귀 시 로그캣(Logcat)에 생명주기가 어떤 순서로 찍히는지 실시간 확인.
- 명시적 인텐트: Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com")) 객체를 생성하여, 내 앱 내부 화면 전환이 아닌 외부 앱(구글 브라우저)을 호출해 띄우는 기능 구현.
2026.04.09 - [[Android] 안드로이드] - [ 안드로이드 기본 ] xml 레이아웃 연습하기 3단계
[ 안드로이드 기본 ] xml 레이아웃 연습하기 3단계
1.BasicApp01 를 활용해 다음과 같은 화면 만들어보기 ▼actuvity_main.xml 코드 2. BasicApp02 2개를 활용해 다음과 같은 화면 만들어보기 ▼actuvity_main.xml 코드 3. BasicApp03주요 구현 조건구조 (Vertical)전체 화
hyekkong.tistory.com
[ 안드로이드 기본 ] 버튼 setOnClickListener() 활용, 이미지뷰 동적 변경, 액티비티 생명주기(LifeCycle)
1. ButtonTest1 를 활용해 다음과 같은 화면 만들어보기▼결과화면▼actuvity_main.xml 코드 ▼MainActivity.java 코드package 본인것;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget
hyekkong.tistory.com
2. 문제 / 헷갈린 점
① 레이아웃 속성 및 단위의 헷갈림
- gravity vs layout_gravity: 텍스트나 이미지를 가운데 정렬하려 할 때 혼동됨.
- gravity: 뷰 내부의 내용물(텍스트 등)을 정렬할 때 사용.
- layout_gravity: 뷰 자체를 부모 레이아웃 안에서 정렬할 때 사용. (FrameLayout 실습 시 알림 배지 숫자를 right|top으로 보낼 때 차이를 체감함)
- dp vs sp: 마진이나 뷰의 크기는 dp(Density-independent Pixels)를 쓰는 것이 맞지만, 폰트 크기는 사용자의 스마트폰 시스템 글꼴 설정에 맞춰 자동 조절되는 **sp(Scale-independent Pixels)**를 사용하는 것이 안드로이드 표준 권장 사항임을 구분하여 암기함.
② Java 익명 클래스와 람다식(Lambda) 문법의 낯설음
- 상황: 버튼 이벤트를 줄 때 new View.OnClickListener() {...} 형태의 괄호 구조가 복잡해 한눈에 안 들어왔고, 이후 생명주기 예제에서 view -> { ... } 형태의 화살표 문법이 갑자기 등장해 당황함.
- 해결: 안드로이드 콜백 처리의 기본 패턴임을 인지함. 화살표 문법은 Java 8부터 지원하는 '람다식'으로, 길었던 익명 클래스 구조를 극단적으로 축약한 것일 뿐 내부적인 동작 원리는 동일하다는 것을 이해함.
③ 안드로이드 고유 시스템: R 클래스와 생명주기의 디테일
- R 클래스: R.id..., R.drawable...처럼 항상 R을 통과해야 하는 이유를 학습함. OS가 개발자가 추가한 모든 자원(레이아웃, 이미지 등)에 고유 정수 ID를 부여하고 목차처럼 자동 관리해 주는 시스템 클래스임을 파악함.
- onPause() vs onStop(): 홈 버튼을 누르면 두 메서드가 연달아 호출되어 역할 구분이 어려웠음.
- onPause(): 반투명 팝업 등으로 화면 일부가 가려지거나 포커스만 잃었을 때 호출됨 (데이터 저장이나 카메라 자원 등 해제 시작).
- onStop(): 다른 앱이 띄워져 화면이 100% 완전히 가려졌을 때 호출됨을 구분함.
3. 오늘 배운 핵심
① 안드로이드 앱은 XML과 Java의 철저한 분업이다:
- 자원은 res 폴더에 두고 XML로 화면을 디자인한 뒤, findViewById와 R 클래스를 통해 Java 객체와 결합하여 기능을 제어한다.
② 뷰 중첩은 FrameLayout, 비율 분할은 LinearLayout의 weight 속성이 정답이다.
③ 앱은 내 마음대로 종료되지 않는다:
- 윈도우 프로그램과 달리 스마트폰 앱은 자원 부족 시 OS가 강제로 죽이거나 살릴 수 있으므로, 생명주기(LifeCycle) 흐름에 맞춘 데이터 저장/복원 로직 설계가 앱의 안정성을 좌우한다.
4. 다음 목표
- XML에서 입력 상자(EditText)를 추가해 사용자의 입력을 받아 Java에서 처리해 보는 기능 구현.
- 명시적/암시적 인텐트를 심도 있게 학습하여, 내 앱 안에서 여러 개의 화면(Activity)을 만들고 데이터를 주고받으며 화면 전환해 보기.
- ListView나 RecyclerView를 활용하여 반복되는 항목(연락처 목록, 채팅방 등)을 스크롤 형태로 화면에 뿌려주는 실습 진행.
'포트폴리오 > [IoT 기반 피지컬 AI 교육일지]' 카테고리의 다른 글
| [ 안드로이드 앱 개발 기초 ] 스레드 제어, Custom View 및 SurfaceView 게임 애니메이션 구현 (35일차 기록) (0) | 2026.04.21 |
|---|---|
| [ 안드로이드 앱 개발 기초 ] UI 이벤트 처리, 화면 전환 및 Handler 타이머 구현 (34일차 기록) (0) | 2026.04.10 |
| [ JAVA 기초 ] 자바 스레드 구현 (32일차 기록) (0) | 2026.04.09 |
| [ JAVA 기초 ] 자바 클래스 기본 구조 및 로봇 산업 취업 정보(31일차 기록) (0) | 2026.03.27 |
| [ C언어 IoT 프로젝트 ] #6 스마트홈 최종 발표 준비 및 회고 (30일차 기록) (0) | 2026.03.27 |