본문 바로가기

전체 글25

[Android] FAB image size 조정하기 [잊어버릴까봐 기록] Floating Action Button 안에 이미지를 넣었는데, 이 때 이미지가 너무 작게 나와 잘 보이지 않았다. 따라서, FAB 안에 원하는 이미지를 삽입할 때 이미지 사이즈 조정하는 방법을 찾아보았다. 아래 코드에서 중요한 건 app:maxImageSize 이다. maxImageSize 부분을 적당히 조절하여 이미지 사이즈를 원하는대로 조정할 수 있다. fragment_fabtest.xml +) 추가로, fabSize는 mini와 normal이 있다. 이 사이즈는 이미지 사이즈를 조정하는 것이 아닌 FAB 자체 사이즈(동그라미 사이즈)를 조정한다. 이 때, mini, normal 둘 다 사이즈가 애매할 수 있다. FAB 자체 사이즈를 조절하고 싶을 때에는, app:fabCus.. 2020. 12. 2.
[Android] 다이얼로그에서 Edittext softkeyboard 올라오면 스크롤 안 되는 현상 [삽질의 기록] 임의의 버튼을 클릭하면 사전에 구현한 CustomDialog를 띄우는 기능을 구현했다. 이 CustomDialog에는 EditText Component가 포함되어 있으며, EditText는 자신에게 focus가 들어오면, 자동으로 soft keyboard를 올려준다. 이 때, dialog가 soft keyboard에 가려져 가려진 부분에 있는 버튼을 누를 수 없다는 불편함이 생겼다. 우선, 해당 다이얼로그에 ScrollView를 추가해주어야 한다. (본인이 스크롤을 하고싶은 구간에 하면 된다.) API 30의 경우 ScrollView만 추가해도 자동적으로 soft keyboard가 나와도 스크롤이 가능했다. 하지만, API 29이하의 디바이스에서는 ScrollView를 추가했음에도 스크롤.. 2020. 12. 2.
[Android] FCM foreground notification [삽질의 기록] Android에서 Firebase Messaging Service를 이용하여 Push notificiation 기능을 구현했다. 앱이 현재 실행 중인 상태가 아닐 때에는 디바이스의 상태표시줄에 푸시 알림이 잘 동작했다. 하지만, 앱이 실행 중인 상태에서 FCM 기능을 사용하고 싶었다. 보통 Application은 누군가가 댓글을 남긴다거나, 좋아요를 누르면 해당 게시글을 올린 사람에게 푸시 알림을 보낼 수 있다. 카카오톡도 마찬가지로 상대방으로부터 메시지가 오면 메시지가 왔다는 푸시알림과 어느 채팅방에 메시지가 왔는지 빨간색 동그라미 나타내어 메시지가 왔다는 표시를 한다. 이처럼, Firebase를 사용하여 알림이 오면 해당 버튼 이미지에 빨간색 동그라미를 나타내는, 즉 알림메시지를 감지.. 2020. 12. 2.
[Android] debug/release SHA-1 추출 방법 [삽질의 기록] 1. Android debug SHA-1 추출 방법 1) Android studio의 오른쪽 상단에 Gradle 탭을 클릭한다. 2) 본인 프로젝트 이름 > app > Tasks > android > signingReport 더블 클릭하여 실행한다. 3) signingReport를 실행하면 화면 하단에 run 탭에서 아래와 같은 결과를 얻을 수 있다. 여기서 SHA-1 값을 확인할 수 있다. 2. Android release SHA-1 추출 방법 1) release용 apk를 만들 때 사용한 jks 파일의 경로를 알고있어야 한다. 2) cmd에서 java가 설치된 경로로 이동한다. (나의 경우, java를 설치할 때 환경 변수도 같이 설정해주어 where java 명령으로 java 설치 .. 2020. 12. 2.
[Android] kakao login release key hash (+ 마켓 등록, Firebase google login X) [삽질의 기록] 안드로이드 네이티브로 카카오 소셜 로그인을 구현한 후, 해당 기능을 포함하는 앱을 배포하기 위해 release용 apk를 만들었다. 하지만, debug로 테스트할 때에는 잘 되었던 카카오 로그인이 release 모드일 때에는 카카오 로그인 기능이 제대로 작동하지 않았다. 분석한 결과, kakao developer의 key hash를 등록하는 곳에 debug용만 등록되었기 때문에 당연히 release용에는 작동하지 않은 것이었다. 우선, release apk를 만들 때 사용한 jks 파일이 있어야하고, key alias 값도 알고있어야 한다. 다음으로, openssl이 설치되어야 한다. sourceforge.net/projects/openssl/ OpenSSL Download OpenSSL.. 2020. 12. 2.
IllegalStateException: No instrumentation registered! [삽질의 기록] 현재 진행하고있는 프로젝트에서 RecyclerView를 사용한다. RecyclerView는 RecyclerViewAdapter와 함께 사용해야한다. 이 때 Adapte에서 Toast를 사용해야했는데, 이 때 위와 같이 IllegalStateException : No instrumentation registered! Must run under a registering instrumentation. 이러한 Exception을 만나게 되었다. Toast는 Toast.makeText(context, message, duration).show(); 와 같은 형태로 사용할 수 있다. 이 때 context 자리에 getApplicationContext()를 사용하면 안된다. Adapter에서 강제로 .. 2020. 11. 19.
[Android] Customizing Spinner arrow icon [잊어버릴까봐 기록] Android Application 개발 과정에서 Spinner의 화살표 아이콘을 바꿔야 했다. 우선, layout에 Spinner를 등록한다. 해당 Spinner의 background를 customizing한 xml 파일을 등록한다. 또한, Spinner에서 arrow icon을 클릭해서 펼쳐졌을 때, 해당 형태를 그대로 유지하기 위해 popupBackground에도 customizing한 xml 파일을 등록한다. 다음은 customizing한 convert_spinner_arrow.xml 파일이다. preview로 확인해보면 아래와 같은 결과를 확인할 수 있다. @drawable/ic_baseline_keyboard_arrow_down_24는 drawable 폴더에서 오른쪽 마우.. 2020. 10. 15.
[Android] Java ArrayList<DataModel> Sorting [나중에 쓰려고 기록] Android Application 구현 과정에서 DB로 받아온 Model을 특정 조건에 맞게 정렬하는 것을 구현해야 했다. (예를 들어, 최신 순, 인기 순, 댓글 많은 순 등) 따라서 Java ArrayList를 정렬하는 여러 링크를 참조하여 다음과 같은 class를 구현했다. 해당 프로젝트의 경우 정렬을 내림차순으로 해야했기에 return 값에 -1을 곱하여 정렬 결과의 reverse한 효과를 주었다. 오름차순으로 정렬해야 할 경우 -1을 지우면 된다. 최신 순은 String 타입의 날짜를 받아서 정렬해야했기에 compareTo() 함수를 사용했다. SortArraylist.java public class SortArraylist implements Comparator{ //.. 2020. 10. 15.
[Android] Java Convert Date [나중에 쓰려고 기록] Android Application 구현 과정에서 DB에서 날짜를 받아오면, 이를 오늘 이 시간으로부터 '~전'으로 표현해야 했다. (예를 들어, ~분 전, ~시간 전, ~달 전 등) 대부분 검색 결과가 오늘로부터 ~일 전의 날짜를 알고싶을 때의 경우들이었다. 따라서 Java 날짜 계산하는 여러 링크를 참조하여 다음과 같은 클래스를 구현하였다. ConvertDate.java public class ConvertDate { private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); public String convertDate(String prevStrDate){ long diffInSeconds;.. 2020. 10. 15.