사진과 같은 BottomSheetDialog를 구현해보고자 한다. 백그라운드에 대한 drawable을 만들어서 최상위 뷰의 background로 지정하면 되지 않을까 생각했었는데 적용되지 않았다. background를 지정해주어야 하는 건 맞지만 themes.xml에서 설정해주어야한다. themes.xml에서 설정하는 글 들이 많이 있지만, 따라해도 안되는 경우가 많았다. 같은 경우라면 아래의 코드를 시도해보면 좋을 듯하다. 바텀 시트 백그라운드 생성 background_bottom_sheet.xml 원하는 모양으로 배경을 생성해준다. Themes.xml 설정 themes.xml에 다음과 같은 코드를 추가해준다. /.../ 그 후, 기본적으로 선언되어 있던 태그 사이에 아래 코드를 추가한다. 이렇게만 해..
해당 화면을 보면 체크 아이콘과 버튼이 활성화 되었을 때와 비활성화 되었을 때 디자인이 다른 것을 볼 수 있다. 앱을 구현하다보면 위와 같이 사용자의 동작에 따라 버튼을 활성화/비활성화 해야하는 경우가 많은데, 이는 Selector를 이용하면 쉽게 구현할 수 있다. Selector 작성 item의 속성에 보면 state_enabled처럼 상태를 지정해줄 수 있다. state_enabled는 활성화 되었을 때를 뜻하며, 클릭 했을 때 색상을 변경하고 싶다면 state_checked를 사용하면 된다. 버튼에 Selector 지정 이런식으로 background에 속성을 지정해주면 된다. 텍스트도 같이 변경하고 싶다면 text에 대한 Selector도 생성한 후 지정해주면 된다.
[ Github ] - Github Actions를 활용하여 release 자동으로 생성하기 [ Github ] - Github Actions로 안드로이드 APK 자동 생성하기 안드로이드 개발을 하다보면 apk를 추출해야 될 경우가 생긴다. 특히, 앱 파트와 서버 파트를 구분해서 분업을 하거나, 디자이너와 같이 협 dongx2.tistory.com 이전 글에서 Github Actions를 이용하여 자동으로 release 하는 방법을 소개했었다. 이번엔 release를 생성하면서 해당 release 게시글에 apk까지 같이 업로드하는 방법을 소개한다. release에 파일을 업로드할 때에는 upload-release-asset api를 사용한다. (자세한 내용은 아래 링크를 참조) GitHub - acti..
[ Github ] - Github Actions로 안드로이드 APK 자동 생성하기 안드로이드 개발을 하다보면 apk를 추출해야 될 경우가 생긴다. 특히, 앱 파트와 서버 파트를 구분해서 분업을 하거나, 디자이너와 같이 협업을 하는 경우 테스트를 위해서 apk를 추출해야하는 경 dongx2.tistory.com 이전 포스팅에서 Github Actions를 이용하여 안드로이드 Apk 파일을 자동으로 추출하고 업로드하는 방법에 대해서 알아봤다. 이번 포스팅에서는 release까지 자동으로 업로드하는 방법을 다뤄보고자 한다. 해당 기능은 Github Actions의 Release API를 사용한다. 자세한 내용은 여기를 참고하자. GitHub - actions/create-release: An Action t..
안드로이드 개발을 하다보면 apk를 추출해야 될 경우가 생긴다. 특히, 앱 파트와 서버 파트를 구분해서 분업을 하거나, 디자이너와 같이 협업을 하는 경우 테스트를 위해서 apk를 추출해야하는 경우가 많다. 기존엔 Android Studio에서 apk를 추출 -> 카카오톡으로 전송 -> 압축 해제 후 설치 라는 번거로운 과정을 거쳤었다. 맨날 추출하면서도 너무 귀찮고 파일도 쌓이고 불편했었는데, 이번 프로젝트에 CI/CD를 도입하게 되면서 Github Actions을 접하게 되었다. 이번 글에서는 Github Actions으로 Apk 파일을 자동으로 생성하고, Github에 업로드하는 방법을 기록하려고 한다. Github Actions 설정 Github 리포지터리에 들어가보면, Actions라는 탭이 있다..
기존에 안드로이드 프로젝트에 MVVM만 적용했을 땐, ViewModel을 기능 기준으로 분류를 했었다. 화면마다 ViewModel를 만들기에는 사용하는 Repository가 너무 많이 겹쳤기 때문에 클래스간 의존성이 너무 높아져서 기능별로 ViewModel-Repository 세트를 구현한다음에, 뷰에서 필요한 ViewModel을 가져다 쓰는 방식으로 개발을 진행했었다. 개발하면서도 위의 문제가 거슬렸었는데, 최근 클린 아키텍쳐를 공부하면서 해결 방안을 찾은 것 같다. 클린 아키텍쳐에선 Repository의 기능 중 필요한 기능만 Use Case로 뽑아서 쓰고, Use Case는 Repository 인터페이스를 참조하기 때문에 의존성이 높지 않다. 위의 방식을 이용하면 화면마다 ViewModel을 만들어..
2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 이해 & 기본 개념 계단은 1~2칸 씩 이동할 수 있다. 3칸을 연속으로 밟아선 안된다. 마지막 계단은 반드시 밟아야한다. 위의 조건에 한해서 계단을 밟았을 때 받을 수 있는 가장 높은 점수를 구하는 문제 중요 포인트 해당 문제에서의 중요 포인트는 아래와 같다. 맨 뒤에서부터 시작 문제 조건에서 마지막 계단은 무조건 밟아야한다고 명시되어 있다. 시작점을 마지막 계단으로 놓고 내려가는 방식으로 구현하면 쉽다. 연속으로 3개의 계단을 밟는 경우 판별 이전에 몇 칸을 뛰어서..
10812번: 바구니 순서 바꾸기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2 www.acmicpc.net 문제 이해 & 기본 개념 1 ~ N 까지의 원소가 있는 배열이 존재 begin ~ end 구간에서 mid를 기준으로 앞뒤를 바꾸는 문제 중요 포인트 스왑을 이용하면 배열 하나로 풀 수 있다. 최종 풀이 mid ~ end의 원소를 스왑을 통해 앞으로 가져올 예정 범위의 마지막 원소부터 시작해서 범위의 맨 앞으로 끌어다 놓는다. mid ~ end 사이의 원소를 begin까지 swap하는 방식으로 반복하면 됨 최악의 경우는 구간이 1 ~ N이고 mid가 1..