본문 바로가기

프로그래밍257

[Flutter] 같은 행에 Widget 정렬하기 처음에 접근한 방식은 Row 위젯에 자식 위젯을 두고 적절하게 Center위젯으로 감싸면 될 거라고 생각했는데 안 된다. Row의 MainAxisAlignment를 center로 바꾸면 처리가 되기는 하는데 각 위젯마다 처리가 안 된다. 문제의 코드 Row( children: [ SizedBox( width: vocaBottomSheetLoginIconSize, height: vocaBottomSheetLoginIconSize, child: image), Center( child: Text( strText, style: const TextStyle( fontSize: textSize16, color: Colors.black, fontWeight: FontWeight.bold), ), ), ], ), 원하.. 2022. 3. 31.
[Flutter] BottomSheet 크기 조정 바텀 시트의 최대 사이즈는 기본적으로 스크린 사이즈의 절반으로 되어 있는데 동적으로 바꾸고 싶다면 showModalBottomSheet 부분을 다음과 같이 교체해야 한다. showModalBottomSheet( isScrollControlled: true, context: context, builder: (BuildContext bc) { return Wrap( children: [...] ) } ) 2022. 3. 31.
[Android] 2차 인증(2 factor authentication) 최근에 회사 내 어플에서 2차 인증 쪽 로직을 추가해서 관련 글을 적어보려고 한다. ​ 일단 흐름은 로그인을 이용하여 우리 어플을 사용하는 유저들이 2차 인증을 통과한 이후에만 서비스를 이용할 수 있도록 하는 기능이다. 2차 인증의 방식에는 Email / OTP 인증이 있는데 google OTP를 주로 많이 사용하는 듯하다. ​ 이메일 같은 경우에는 모바일 앱에서 이메일에 대한 요청을 보내고 인증 코드를 입력하면 유효성을 확인하는 통신 처리가 필요하다. 이거는 흔히 사용하는 방식이니까 굳이 더 자세한 설명은 필요 없을 것 같다. ​ Google OTP의 경우에는 구글에서 따로 제공하는 어플이 있는데 우리가 키를 등록하면 30초를 주기로 6자리 인증 코드를 생성해 준다. 우리가 어플에서 인증을 받는 상황에.. 2022. 3. 30.
[Android] Toolbar padding in Tablet ​ stackover flow를 찾아보니까, Toolbar를 찾아와서 거기에 직접 자식을 넣고 inflate하는 방식, 속성 처리.. 여러 방법이 있는데 나의 경우에는 다른 문제였다. ​ 찾아보면 이런 거 많이 한다. ​ 나는 Material Design을 이용해서 AppBarLayout, MaterialToolbar를 이용하고 내부에 ConstraintLayout을 사용하여 구현했다. ​ 이런 상황에서 Tablet기기부터 좌우에 뭔가 색상이 뭍어나오는데 Tablet보다 작은 크기의 기기들은 문제가 생기지 않았다. contentInsetStart, consentInsetEnd값을 주지 않으면 옆에 공간이 남는다. 추가적으로 paddingStart, paddingEnd에 값을 줘야 한다. ​ 안드로이드 내.. 2022. 3. 30.
[Android] EditText with ObjectAnimator android에서 View에 애니메이션을 주고 싶은 경우가 생긴다. ​ 인터넷에서 ObjectAnimator를 이용하는 방식 View.animate()... ViewPropertyAnimator를 이용하는 방식이 있다. (사용) ​ TranslationX, Y 값을 이용해서 이동을 시킬 수 있는데, Button이나 TextView에서는 크게 문제가 생기지 않는다. 이동한 자리에서 클릭을 해도 후처리가 자연스럽게 연결이 되는데 ... EditText를 사용한 View를 애니메이션 시킨 경우에는 텍스트를 가리는 문제가 생길 수 있다. ​ 예를 들어서 EditText View를 Y축으로 100만큼 이동을 시키면 실제 보이는 영역은 100만큼 이동을 하는데 처리되는 영역(실제 영역)은 그대로 위치를 하게 된다... 2022. 3. 30.
[영상처리] iFrame 관련 이슈(프레임 깨짐 현상) 영상 데이터를 보낼 때 모든 픽셀 정보를 하나씩 처리해서 데이터를 보내지 않는다. 데이터가 너무 커져서 그런 방식은 사용하지 않고 iFrame과 pFrame의 개념을 이용하는데 iFrame은 하나의 완성된 장면을 가지고 있고 pFrame은 이진 데이터로서 움직임에 따른 장면만 가지고 있다고 한다. ​ 이런 상태면 영상 데이터의 크기를 획기적으로 줄일 수 있게 된다. pFrame은 앞선 frame 정보를 토대로 자신의 정보를 복구하기 때문에 이전 frame의 정보가 보존이 되어야 한다는 특징이 있다. ​iFrame의 경우에는 완성된 그림이므로 이전 Frame의 영향을 받지 않는다. ​ 기존 로직에서는 영상 데이터에 iFrame 정보가 들어오면 이전에 쌓인 Frame 정보를 버리고 영상을 그려주는 처리를 해.. 2022. 3. 30.
[Android] RecyclerView in ScrollView ScrollView 내부에 존재하는 RecyclerView를 사용하는 경우에 아이템이 모두 출력이 되지 않는 오류가 있다. ​ ScrollView를 NestedScrollView로 교체하고 RecyclerView 속성으로 android:nestedScrollingEnabled="false"를 준다. (내부 스크롤링 처리) ​ 아니면, RecyclerView크기 떄문은 아닌지 확인한다. https://stackoverflow.com/questions/47348955/recyclerview-is-not-showing-all-items-in-the-list 나의 경우에는 ScrollView내부에서 RecyclerView속성으로 NestedScrollingEnabled = false처리를 하는 상황에서 아이템이.. 2022. 3. 29.
[Android] aar 파일 만드는 방법 회사에서 사용하는 프로젝트는 여러 개의 모듈로 같이 이루어져 있는 경우가 많습니다. 제가 다니는 회사는 이러한 모듈이 철저하게 SDK화 되어 있어 UI코드를 위한 Module과 내부 Core처리를 위한 SDK 모듈로 나뉘어져 있는데요. aar파일을 얻어내는 방법을 알아보겠습니다. 안드로이드 스튜디오의 우측 상단에 Gradle 버튼을 눌러 우측창을 키고 코끼리(Gradle) 버튼을 눌러줍니다. gradle assembleRelease를 입력합니다. 그러면 프로젝트의 모든 모듈에 대해서 aar파일로 만드는 작업을 거치는데 무시하고 위에 상단에 assembleRelease 버튼을 누르고 하단에 Edit Configuration을 누릅니다. 여러 모듈 중에 aar 파일로 만들고 싶은 모듈을 선택하여 OK 버튼을.. 2022. 3. 29.
[Android] DrawerLayout with FrameLayout 삽질 이번에 작업한 요구사항이 세로 모드에서는 5가지 옵션을 출력하는 DrawerLayout을 보여주시고 가로 모드에서는 8가지 옵션을 출력하도록 해달라는 내용이었다. 내부적으로 width 값을 적용했는데도 뭔가 그림이 짤리거나 적용했던 drawable이 제대로 출력되지 않았다. ​ 내가 놓쳤던 부분은 여러가지가 있었는데, 일단 로그를 찍지 않은 것. 로그를 찍으면 어떤 값이 변하고 어떤 것이 변하지 않는지 알아낼 수 있는데 아직 습관화가 되지 않았다. ​ 두 번째로 보이는 현상에 대한 이해가 부족했다. 이미지가 짤린다라는 내용을 봤다면 -> 사이즈가 잘못 잡혀있다. -> 로그로 찍어본다 -> 로그를 보고 문제를 유추한다가 되어야 하는데, 이렇게 했는데 안 돼? 저렇게 했는데 안 돼? 이것만 계속 하고 있으니.. 2022. 3. 29.
[Android] 앱 여부 확인하기 // if you use this in Android 11(api 30) // add this below lines in manifests fun hasAnyApp(strPackageName: String): Boolean { val intent = packageManager.getLaunchIntentForPackage(strPackageName) return intent != null } 안도르이드 11 버전을 사용하는 경우 query를 작성해줘야 getLaunchIntentForPackage 함수가 정상적으로 작동합니다. 2022. 3. 29.