본문 바로가기

안드로이드44

[안드로이드] TabLayout와 ViewPager2연결 구현 방법 ViewPager2 를 이용하면 여러개의 Fragment 들을 하나의 Activity내에서 스와이프 시켜 노출시킬 수 있다. 여기서 한 걸음 더 나아가 TabLayout을 ViewPager2에 연동하면, 탭 메뉴를 통해서도 Fragment 들을 노출시킬 수 있다. ViewPager2 를 이용한 Fragment 연결 방법은 아래 글에 상세하게 정리되어 있다. [안드로이드] 여러개의 Fragment Swipe 구현 방법: ViewPager2 이 글에선 위의 작업이 완료된 상태에서 TabLayout을 연동하여 상단에 탭메뉴를 추가하는 방법만 정리한다. 방법은 아주 간단하다. 1. TabLayout 추가 2. Tablayout과 ViewPager2 연결 처리 1. TabLayout 추가 - Activity의 레.. 2021. 8. 22.
[안드로이드] 여러개의 Fragment Swipe 구현 방법: ViewPager2 ViewPager2를 이용하면 하나의 Acitivity에서 여러개의 Fragment를 Swipe(플리킹 및 드래그)하여 노출 시킬 수 있다. 방법은 아주 간단하다. 1. ViewPager2 배치하기. 2. Fragment 여러개 만들기 3. FragmentStateAdapter 만들기 4. FragmentStateAdapter를 이용해 Fragment들을 ViewPager2에 연결하기. 1. ViewPager2 배치하기 - Acitivity 의 레이아웃XML파일에 ViewPager2 위젯을 추가한다.(나중에 여기에 Fragment들을 연결하여 노출시킬 것이다.) - ViewPager가 아니라, ViewPager2를 사용하는 것에 주의하자. 2. Fragment 여러개 만들기 여기서는 3개의 Fragmen.. 2021. 8. 22.
[안드로이드] 커스텀 뷰 영역 크기 설정: onMeasure(), setMeasuredDimension() 안드로이드에서 커스텀 뷰를 만들기 위해서는 보통 아래의 작업 과정을 거친다. 1) View 를 상속 받는 커스텀 뷰 클래스를 만들고, 2) onDraw() 메서드를 오버라이드해서 Canvas 객체로 그림를 그린다. 3) 레이아웃 XML파일에 커스텀 뷰를 추가한다. 예를 들어 아래와 같이 커스텀 뷰 클래스를 작성하고 띄워보자. class CustomViewSize: View { // 생성자 constructor(context: Context?) : super(context) constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) // onDraw() 오버라이드: 그림 그리기 override fun onDraw(canvas: .. 2021. 8. 22.
[안드로이드] 원형 프로그레스바 동적으로 조정하는 방법 안드로이드 커스텀 원형 프로그레스바의 진행률을 동적으로 설정하는 방법을 정리한다. 아이디어는 간단하다. 호(Arc)를 그려 원형 프로그레스 바를 만들고, 사용자 이벤트나 진행상황에 따라 호의 각도 값을 조정하는 것이다. 원형 프로그레스바(도넛 그래프) 자체를 만드는 방법은 아래 글을 참고하자. [안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 1. 커스텀뷰(원형 프로그레스바) 코드 1) numProgress 라는 변수를 만들어 그려질 호의 값도값을 관리한다. 2) canvas.drawArc() 메서드 호출시, sweepAngle 매개변수를 numProgress 변수로 설정한다. 3) setPregoress() 메서드를 따로 만들어서, numProgress 값을 업데이트하고, invali.. 2021. 8. 21.
[안드로이드] 원형 프로그레스바 테두리 끝 둥글게 Roound 처리 방법 안드로이드에서 원형 프로그레스바를 만들고, 1. 테두리를 부드럽게하고, 2. 그래프 선 끝부분을 둥글게 처리하는 방법을 정리한다. 안드로이드 도넛 그래프(원형 프로그레스바) 만드는 방법은 아래글을 참고 [안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 # 원형 프로그레스바 디자인 다듬기 원형 프로그레스바의 테두리/가장자리가 부드럽고, 끝부분은 둥글게 Round 처리 해보자. 1. 테두리 부드럽게 처리 Paint객체.isAntiAlias = true * 단, 이 설정은 추가 연산이 필요해서 복잡한 뷰의 경우 성능 이슈가 있을 수 있다고 한다. 2. 그래프 선의 끝 가장자리를 둥글게 처리 Paint객체.strokeCap = Paint.Cap.ROUND class CustomCircleBar.. 2021. 8. 21.
[안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 커스텀 뷰를 이용해 도넛 그래프 형태의 원형 프로그레스바를 만들어 본다. 커스텀 뷰 기초는 아래 글을 참고하자. [안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 [안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml [안드로이드 코틀린] 커스텀 View 화면 갱신 방법(새로 그리기): invalidate() # 원형 프로그레스바 생성 방법 1. 바탕이 되는 360도의 호를 그려준다. 2. 진행률을 표시할 호를 다른색으로 그려준다. class CustomCircleBarView: View { // 생성자 constructor(context: Context?) : super(context) constructor(context: Context?, attr.. 2021. 8. 21.
[안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml 커스텀 뷰의 기초 사용 방법은 아래 글 참고 [안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 커스텀 뷰를 사용할 때, 커스텀 뷰를 위한 속성을 정의하여 사용해야할 때가 있다. 방법은 간단하다. 1. attr.xml 파일에 커스텀 속성을 정의해두고, 2. 커스텀 뷰 클래스에서 attr.xml 파일에 정의한 속성을 참조하여 뷰에 적용하도록 설정하고, 3. 레이아웃 XML 파일에서 를 등록하면서 attr.xml 에 정의한 속성을 사용하면 된다. # 커스텀 속성 정의 방법 1. res > values 경로에 attrs.xml 파일을 생성 2. 태그 생성 - name 항목에는 커스텀뷰 클래스명을 입력해준다. 3. 태그 생성 - name에는 속성명, format에는 속성의 타입을 정의해준다.. 2021. 8. 20.
[안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 # 안드로이드 View 출력 원리 안드로이드 시스템은 XML에 정의된 View 태그와 속성을 기반으로 생성된 View 객체와 AttributeSet 객체를 이용해 화면에 View 를 그려준다. 좀더 풀어 쓰면, 레이아웃 XML에 정의된 모든 View 들은 화면에 출력 될 시점에 안드로이드에 의해 View 객체로 변환되어 메모리에 올라가며, 이 때, 각 뷰의 내부 속성(색상, 크기 등)은 AttributeSet 객체로 변환되어 View 클래스 생성자의 매개변수로 전달 된다. 이렇게 생성된 View객체를 안드로이드가 해석하여 화면에 그려준다. 참고로 XML 에 정의된 View 를 객체로 생성해 메모리에 올리는 과정을 Inflate 라고 한다. (경우에 따라 코드상에서 개발자가 직접 이 작업을 수행하기도 한다.. 2021. 8. 20.
[안드로이드 앱] AAB 빌드 안될 때 해결 방법: keystore password was incorrect, getSecretKey failed: Password is not ASCII 안드로이드 스튜디오에서 Build > Generate Signed Bundle or APK 메뉴로 앱을 AAB로 빌드할 때, 아래와 같은 에러 로그가 뜨면서 빌드가 안 되는 문제가 발생할 때가 있다. 자세한 로그는 다음과 같다.(일부 생략) FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:signReleaseBundle'. > A failure occurred while executing com.android.build.gradle.internal.tasks.FinalizeBundleTask$BundleToolRunnable > Failed to read key: keystore passw.. 2021. 8. 16.