반응형
Google 버그가 먹어버린 3시간, CoordinatorLayout와 RecyclerView
Android, iOS 2020. 1. 14. 11:14

현상을 요약하자면 다음과 같다. RecyclerView로 리스트가 나타난다. 스크롤을 한다. 스크롤이 멈추자마자 개별 Holder의 버튼을 클릭한다 그런데 클릭 이벤트가 발생하지 않는다??? 조금 기다렸다가 클릭을 하면 된다. 또는 두번째 클릭을 하면 이벤트가 발생한다. 평소에 수백번도 만들어 본 리스트다. 그런데 뜬금없이 클릭이벤트가 안된다고? 난 수차례 내 코드를 살펴보고 모르는 구조가 있는지 검색을 한 다음에야 구글이 해결하지 못한 버그라는 것을 알게 되었다. 이런 현상이 나타나는 경우는 더 존재한다. 특히 AppBarLayout가 그렇다. CoordinatorLayout와 RecyclerView 혹은 AppBarLayout을 사용했을 때 원하는 형태 혹은 이벤트가 발생하지 않는 것으로 보인다. 이..

Volley에서 newRequestQueue를 Deprecated시켰다고 한다
Android, iOS 2020. 1. 6. 15:04

최근에 volley를 1.1.1로 업데이트를 했더랬다. 그러고 얼마지나지 않아 아래와 같은 이슈가 터졌다. Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.Request.setRequestQueue(com.android.volley.RequestQueue)' on a null object reference 발생 지점을 확인해보니 Deprecated된 newRequestQueue를 사용하고 있었다. 그렇다면 RequestQueue가 무엇일까? document에서는 아래와 같이 설명을 하고 있다. public class RequestQueu..

큰 이미지가 계속 흐릿해보이면 Glide를 의심해보자
Android, iOS 2020. 1. 2. 16:34

맹세코 노안이 올 시기가 아닌데 디바이스의 이미지가 좀 흐릿해 보인다. 서버에서 이미지를 엉뚱한걸 보내나 싶어서 다운로드 받았는데 멀쩡하다. 그래서 이미지를 그냥 로컬에 담아서 ImageView에 set을 해봤는데 이것도 멀쩡하다. 그렇다면 의심해볼 녀석은 하나밖에 남지 않았다. "야!! 글라이드!! 너 뭐하는거야?" format이 문제가 아니다 먼저 샘플 코드를 보자. 무엇이 문제인지 찾기 위해 주석처리를 하면서 많은 옵션을 넣은 흔적이 보이는가? Glide.with(this) .load(R.drawable.bigimage3) .format(DecodeFormat.PREFER_ARGB_8888) // .diskCacheStrategy(DiskCacheStrategy.NONE) // .skipMemory..

JavaScript는 모르지만 WebView에서 사용하고 싶어!!
Android, iOS 2019. 11. 28. 15:05

마아아아아아아아아아아안약에, 만약에 웹뷰의 특정 이벤트를 네이티브에서 받아서 메시지를 보여주고 싶다면 어떻게 해야할까? 여러 방법이 있겠지만 JavaScript 함수를 호출하는 방법을 써보고자 했다. 동작이 되는 웹서비스를 만들 수 없으니 로컬에 HTML 파일을 두고 테스트할 수 있도록 샘플앱을 만들었다. (착하지?) 내 Github에서 모든 코드를 확인할 수 있다. (정말 착하지?) var handler = Handler() inner class AndroidBridge { @JavascriptInterface fun sendData(msg: String) { handler.post(Runnable { var message = msg if (message.isEmpty()) { message = "입력..

ViewPager 안에 수평 스와이핑 View가 또 있다면?
Android, iOS 2019. 11. 25. 19:58

수직 스크롤 안에 수직 스크롤 되는 뷰가 또 있다면 꽤 피곤하다. 보통 이럴 때 사용하는 것이 nestedscrollview이다. 이런건 수직 스크롤에서 발생하는 이슈. 그렇다면 수평인 경우에도 이렇게 골치 아픈 일이 있지 않을까? 문제는 다음과 같다. MainActivity 내부에 ViewPager가 있다. ViewPager의 스와이프 기능은 오버라이드된 canScroll()에서 막았다. ViewPager에는 여러개의 Fragment가 동적으로 붙는다. Fragment 중 일부는 WebContainer로 구성되어 있고 이 WebContainer는 WebView를 갖는다. WebView에는 수평 스크롤 View를 가질 수 있다. Fragment 중 일부는 완전한 네이티브로 구성되어 있고 수평형 Recyc..

targetSdkVersion 28로 올렸을 때 만날 수 있는 문제점
Android, iOS 2019. 11. 13. 19:53

11월의 어느날, Play store에 릴리즈를 하려고 APK를 Console에서 업로드를 했는데... "자세히 알아보기"를 클릭해보면 "Google Play의 대상 API 레벨 요구사항 충족하기"라는 구글 문서가 나온다. 앱 업데이트는 2019년 11월 1일부터 Android 9.0(API 레벨 28) 이상을 타겟팅하도록 요구하기에 이 시점부터는 해당 레벨 미만의 앱은 업데이트가 안된다는 뜻이다. (왓더) 그래서 SDK를 업데이트를 했다. minSdkVersion = 16 targetSdkVersion = 28 // Update : 26 to 28 compileSdkVersion = 28 buildToolsVersion = '28.0.3' 이제 빌드를 해야지 했는데... 설치가 안되는 경우 설치가 되었..

Flickr API를 사용하여 이미지를 가지고 놀아보자
Android, iOS 2019. 10. 30. 18:07

샘플 이미지가 필요한 경우, 그것도 많이, 왠만하면 검색도 가능하게. 그럴려면 돈을 지불해서 구글 검색이나 상용화 API를 떠올릴 수 있다. 하지만 Flickr API로 간단하게 구현도 가능하다. 오늘은 Flickr에서 이미지를 가지고 오는 방법을 기록해본다. Flickr는 야후가 인수한 이미지 공유 서비스로 자세한 설명은 나무위키 링크로 대체한다. 샘플용 앱 링크는 아래와 같다. conquerex/SearchKoreanFood 이미지와 비디오 리스트를 볼 수 있는 Sample App. Contribute to conquerex/SearchKoreanFood development by creating an account on GitHub. github.com 일단 통신을 할 수 있는 상황은 세팅 되었다고..

안드로이드에서 Thread가 중요한 이유
Android, iOS 2019. 10. 25. 19:03

쓰레드, 쓰레드, 쓰레드... 말은 무지하게 많이 들어봤지만 제대로 들여다본 적은 없는 1인 그래서 알아봈다. 쓰레드가 뭐고 당췌 왜 중요한가... 쓰레드가 뭐시당가 먼저 프로세스(Process)를 이해해봅시다. 간단히 얘기해서 메모리 상에 실행되고 있는 프로그램이 프로세스입니다. 이 프로세스가 간단하다면 하나의 연산만 진행하고 대기상태에 머물겠죠. 텍스트 한줄만 있는 앱이 있다면 텍스트만 보여주기만 하면 되니깐 그럴 수 있습니다. 하지만 보통 2개 이상의 연산을 해야됩니다. UI를 보여주면서 서버와 접속도 해야되고 현재 상태도 확인해야하는 등의 상황이 있죠. 이렇게 독립적으로 실행이 되는 흐름/줄기/가닥을 쓰레드(Thread)라고 부릅니다. 안드로이드 쓰레드 Java를 공부하면 눈에 익숙한 함수가 나온..

Dialog 테두리를 둥글게 하고 싶다. 엄청하고 싶다.
Android, iOS 2018. 9. 27. 12:06

둥글게는 만들어지는데 계속 직사각형과 둥근 부분의 나머지 부분이 하얀색으로 남는다.그냥 둥근 테두리가 색상으로 추가된 모습?이 부분이 투명하게 되어야 되는데 걍 Radius 넣어서 되지가 않는다. (아놔)style을 주기도 해봤지만 잘 되지 않다가 드디어 완성했다. 지금부터 등X이 Dialog 테두리 혹은 모서리를둥글게 만들어 보겠다. 123public class CustomDialogFragment extends DialogFragment { // R.layout.cutom_dialog를 inflate 시키자. 알아서.}Colored by Color Scriptercs 그럼 cutom_dialog가 어떻게 생겼는지 알려줘야겠지. 123456789101112 Colored by Color Scripter..

Edittext에 "-"(대쉬, Dash)가 들어간 포맷을 만들고 싶다면?
Android, iOS 2018. 9. 27. 11:08

물론 Edittext를 커스터마이징 하는 방법이 있다.하지만 여러번 쓰이는 오브젝트가 아닌 이상 그럴 필요가 없다고 봤다. 다음과 같은 조건을 만족하는 Edittext를 만들어보자.총 16자리 숫자 입력4자리씩 "-"(Dash)로 끊어서 표현 예시 : 1234-5555-6666-7890 단순하게 TextWatcher를 사용해서 입력하는 즉시 대쉬가 표현하면서 체크가 되게 하였다.체크 사항은 입력값 뿐만 아니라 대쉬를 포함한 길이도 중요하다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 edtInput.addTextChangedListener(new..

728x90
반응형