hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (151) N
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (6) N
      • 공부 (1)
      • Spring (5) N
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s
IT 동아리/UMC 3기 (Android)

[UMC/Android] 5주차 - 메모 어플 만들기

[UMC/Android] 5주차 - 메모 어플 만들기
IT 동아리/UMC 3기 (Android)

[UMC/Android] 5주차 - 메모 어플 만들기

2022. 11. 3. 22:20
728x90

5주차 - 메모 어플 만들기

자급자족 만들어본 대표이미지

👾 할 커스텀 목록

  • 메모 작성 날짜 기록
  • item 클릭 시 메모 이동 후 내용 수정가능
  • 메모 작성 완료시 Custom Dialog 띄우기
  • 휴지통 클릭 시 삭제
  • 간단한 splash 화면 구현하기.
  • back시 Custom Dialog 띄우기
  • 메모 title 텍스트 색 변경하는 palette Dialog 만들기,텍스트 변경된 색 저장하기
  • 닉네임 입력받고 00님의 메모 title 설정하기

👾 구현 영상 및 설명

구현 영상

💥 Splash 화면

  • 앱 실행시 약 2초간 뜨는 화면으로 직접 디자인 후 실행되도록 하였다.

👤 이름 입력창

  • 닉네임을 입력하는 창이 나온다. 입력하지 않고 버튼을 누를시 닉네임을 입력하라는 Toast Message가 뜨도록 하였다.

📝 Memo 화면

  • 닉네임 입력창에서 입력한 닉네임이 반영되어 ㅇㅇ님의 메모가 최상단에 뜬다.
  • 메모 리스트에서 + 버튼을 누르면 새로운 메모를 작성 할 수 있다.
  • 제목과 내용을 작성할 수 있고, 작성한 현재 날짜가 달력 옆에 표기된다.
  • 제목 옆 브러쉬 아이콘을 누르면 제목의 글자 색을 바꿀 수 있는 palette dialog가 나온다. dialog에서 바꾸고싶은 색을 클릭시 제목 글자색이 변경된다. 그리고 바뀐 글자색은 item에서도 보이고 다시 들어가도 적용된다!
  • 메모 작성 완료 후 하단 체크버튼을 클릭시 Custom Dialog가 뜨도록 하였다.
  • 아니오를 누르면 현재 메모상태에 머물도록, 예를 누르면 저장되어 리스트에 새롭게 메모가 추가되도록 하였다.
  • 제목을 작성하지 않고 메모를 등록 할 시 제목을 입력하라는 Toast Message가 뜨도록 하였다.

📝 Memo 목록 화면

  • 메모 리스트에 item 하나를 클릭시 해당 메모가 저장되어있는 메모창으로 넘어가고, 이를 수정할 수 있다.
  • 메모 수정시 현재 수정한 날짜로 값이 변경되어 저장된다.
  • 메모 리스트 item의 휴지통 버튼을 클릭하면 해당 메모는 삭제되어 리스트에서도 보이지 않는다.
  • item에는 제목과, 메모를 작성한 날짜, 메모의 내용이 뜨도록 하였다.
  • 단 메모의 내용이 15글자가 넘어가거나 또는 줄바꿈이 있을 시 그 이후 글자는 … 으로 중략하여 나타냈다.

👾 코드

https://github.com/ss99x2002/UMC_Android

👾 트러블슈팅

1️⃣ DataBinding 문제

  • 문제: xml에 onClick::”@{()→onClose}” 를 해도 버튼 클릭시 아무런 반응이 일어나지 않았다.
  • 원인: DataBinding시에는 클래스의 바인딩하는 방식이 달랐고 ViewBinding방식으로 binding 해둬서 함수 구현이 적용되지 않았다.
  • 해결: DataBindingUtil 적용해서 binding하니 실행되었다.

2️⃣ EditText 값 없는지 확인하기

  • 문제: editText.text==null 로 조건문을 이용해 값 존재여부를 파악하려 했으나 조건에 걸리지 않았다.
  • 원인 및 해결 : editText의 값 존재여부는 editText.text.isEmpty()를 이용해 파악해야한다.

3️⃣ Back 버튼시 Custom Dialog 발생시키기

  • 문제: 과제4처럼 뒤로가기 발생시 Custom Dialog를 띄우고자 했으나, dialog가 안나오는 문제 발생.
  • 원인: 근본적인 원인은 onStop과 onRestart 생명주기에 대한 잘못된 이해 때문이다.
    • onStop은 다른 Activity가 기존 Activity를 완전히 가릴때 활성화 됨.
    • onRestart는 Activity가 정지된 후 다시 시작될 때 호출 됨.
    • 과제4는 텍스트를 입력하는 화면 → 확인하는 화면 이후 확인하는 화면에서 뒤로가기로 텍스트를 입력하는 화면으로 왔을 때. onRestart() 가 새롭게 다시 실행된다. 즉 텍스트를 확인하는 화면이 아닌 입력하는 화면에 dialog가 뜨는 것이였다.
  • 해결: 내가 만들고자 하는 기능은 메모 Activity → 메모 list Activity 로 뒤로가기를 누르게되면 확인하는 dialog가 뜨도록 하는것이기 때문에 onBackpressed를 활용 해 dialog를 띄우면 된다.
    • 근데 onBackpressed가 deprecated 되었기 때문에 callBack을 추가해서 기능을 구현하였다.

4️⃣ Custom Dialog 사이즈 문제

  • 문제: xml 파일에서 만든 dialog가 내 생각과는 다르게 많이 좁아지게 나옴
  • 원인: xml에서 dialog를 만들 때 너비를 match parent로 주고 margin을 start와 end에 각각 주어서 크기를 만들었는데, margin이 생략된 채 match parent로 실행되었기 때문이다.
  • 해결: WindowManager.LayoutParams.*WRAP_CONTENT* 로 바꾸고 dialog 큰 layout 내 요소들의 크기들을 조정하여 원하는 크기로 만들었다.

👾 배운점

1️⃣ DataBinding

  • 이제껏 ViewBinding 만 쓰다가 xml에 DataBinding을 적용해보았다. 특히 CustomDialog를 만들때 직접 Dialog interface를 만들어 사용했기 때문에 더욱 편리했다.
  • dataBinding 시에는 class에 기존의 binding을 선언하는 방식과는 달랐다.
binding = DataBindingUtil.setContentView(this,R.layout.activity_memo)
        setContentView(binding.root)
// 다음과같이 binding을 선언해줘야 dataBinding이 된다.
  • 기존의 onClick를 override해서 함수를 적용할수도 있고, @{()→variable.func} 형태로도 적용할 수 있다.

2️⃣ Dialog Interface 만들기

  • 기존의 안드로이드에서 제공하는 dialog가 아닌 직접 디자인한 Custom Dialog를 적용하고 싶어서 직접 dialog interface를 만들었다! (confirm dialog와, palette dialog)
  • 클릭리스너로 두개의 함수를 만들어서 예 버튼 클릭시 onConfirm() 아니오 클릭시 onClose() 함수가 실행되도록 하였다.
  • 해당 부분은 사용할 activity에서 override하면 된다.
//중략
interface DialogClickListener{
        fun onClose()
        fun onConfirm()
    }

3️⃣ Android Splash 권고사항

  • 현재 memo 앱에서는 Splash Activity를 메인으로 설정하고, 메모 리스트 Activity로 넘어가도록 만들었다.  (그래서 기본 splash + 내가 만든 splash 화면까지 두개가 뜬다 ^^; 이 방법은 앱 다시 시작시 한번 더 리소스들을 로드해야하는 불필요한 대기 시간이 발생하기 때문에 아래와 같은 권고사항을 따르는게 좋다.)  관련블로그 -> https://sungbin.land/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C12-%EC%8A%A4%ED%94%8C%EB%9E%98%EC%8B%9C-%EB%8C%80%EC%9D%91%ED%95%98%EA%B8%B0-1729f69dc33f
  • 현재 Android API 12에서 Splash 화면을 Theme을 이용해서 만드는것이 권고되어있었고, 여러 속성을 이용해 앱의 아이콘 벡터를 가운데 설정하고, 백그라운드 배경색을 지정하여 Splash 화면을 만들 수 있다고 한다.
728x90
저작자표시

'IT 동아리 > UMC 3기 (Android)' 카테고리의 다른 글

[UMC/Android] 8주차 - RoomDB 활용하기  (0) 2022.11.23
[UMC/Android] 7주차 - Thread 이용한 타이머 만들기  (0) 2022.11.16
[UMC/Android] 6주차 - Bottom navigation, TabLayout, ViewPager2  (0) 2022.11.13
[UMC/Android] 3주차 - Activity/Fragment간 데이터 전달  (0) 2022.10.12
[UMC/Android] 2주차 - 레이아웃 만들기  (0) 2022.10.08
'IT 동아리/UMC 3기 (Android)' 카테고리의 다른 글
  • [UMC/Android] 7주차 - Thread 이용한 타이머 만들기
  • [UMC/Android] 6주차 - Bottom navigation, TabLayout, ViewPager2
  • [UMC/Android] 3주차 - Activity/Fragment간 데이터 전달
  • [UMC/Android] 2주차 - 레이아웃 만들기
hyeon.s
hyeon.s
이유있는 코드를 짜자
개발로그이유있는 코드를 짜자

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.