All(266)
-
XML로 커스텀 버튼 만들기
버튼을 만들기 위해 디자이너분께 이미지를 요청했더니, 이미지를 네 장 전달받았다. 일반(Normal), 비활성화(Disabled), 눌렸을 때(Pressed), 선택됐을 때(Selected)로 추정된다. Drawable의 상태는 StateListDrawable, Android Developers을 참조하자. 이 이미지를 하나의 버튼으로 만들려면 다음의 과정을 거치면 된다. Drawable에 xml파일을 생성하고, 각 상태별 이미지를 지정해준다. 완성된 xml파일을 Button의 Background로 지정해준다. 상당히 간단하다. 우선 Drawable에 xml파일을 하나 생성해준다. 내가 가지고 있는 이미지는 button_normal, button_disabled, button_pressed, button..
2019.02.18 -
Android Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE
adb를 사용해서 apk를 설치(adb -r install [패키지명])하려고 했더니, Android Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE라는 경고문구가 떳다. 검색해보니 동일한 package의 프로그램이 설치되어있을 시, 재설치를 시도하는 도중 서명키의 충돌로 인해 발생하는 에러라고 한다. 충돌이 발생한 앱을 삭제한 후 다시 설치하면 에러를 해결할 수 있다. 생각해보니 Android Studio에서 Release/Debug를 반복했을 때 해당 증상이 발생하는 경우가 있었고, 이런 경우 Android Studio에서 ‘앱을 삭제 후 다시 설치할래?’라는 늬앙스의 확인창이 출력됐었다. 여하튼 삭제하고 다시 설치하면 된다. …고 되어있었는데, 스마..
2019.02.18 -
주말간의 삽질과 결과물(AWS Lambda 내에서 HTTP로 JSON 데이터 불러오기)
하고 싶었던 것 온라인 게임인 스마이트(SMITE)의 홈페이지에 들어가보면, 아이템 리스트를 가져오는 API로 아이템을 불러오는 걸 알 수 있었다. 이 데이터를 특정 저장소에 저장한 뒤, 한글로 번역하고 싶었다. 문제는 시즌이 계속되는 중간에도 이 데이터는 미세하게 변경된다. 물론 모든 데이터가 그런 것은 아니다. 하지만 어찌됐건 귀찮은 문제였다. 그래서 생각해낸것이 AWS의 Lambda였다. 우선 데이터를 한글로 번역해놓은 뒤, 일부 수치는 일정 기간마다 API를 통해 업데이트하면 되지 않을까. 실제로 주말간 했던 것 Node.js나 Python을 제대로 써본적이 없었다. 물론 검색해서 더듬더듬 구현하는거야 큰 문제가 되진 않겠지만, 내 코드가 아니라 그저 복사 붙여넣기에 그치지 않을까싶었다. 그나마 ..
2019.02.18 -
Oreo 이상의 OS에서 Notification이 발생하지 않는 문제
>Developer warning for package "com.your.app" Failed to post notification on channel "null" See log for more details Notification이 발생하지 않아서 원인을 추적하던 중, Notification이 발생해야 할 시점에 Logcat을 확인하니 위와같은 에러가 찍혔다. 테스트용 스마트폰을 LG G5, Samsung Galaxy FE, Samsung Galaxy 7을 구비해놓고 테스트했는데, Samsung폰에서만 증상이 발생해서 제조사에 따른 문제인가 싶었다. 확인해보니 Android 8.0 부터 추가된, notification channels과 관련된 내용이었다. LG G5에서 증상이 발생하지 않은 건, 단순히..
2019.02.14 -
RecyclerView와 IndexOutOfBoundsException
기존에 릴리즈된 Android App을 유지보수하면서, RecyclerView에 아이템을 추가하는 코드가 때때로 IndexOutOfBoundsException로 인해 App Crash가 발생하는 경우가 발생했다. Android 자체를 너무 오랜만에 보다보니, RecyclerView에 대한 것부터 알아봐야했다. 자세한 내용을 정리하기엔 시간이 부족한데다가, 잘 정리된 글들이 많아서 이하의 링크로 대체한다. RecyclerView, Android Developers Android RecyclerView 사용하기, Taehwan 님 RecyclerView에 대한 고찰, Dudmy 님 스크롤이 발생했을 때 스크롤의 위치가 마지막일 경우 다음 검색결과를 불러온 뒤, notifyItemRangeChanged(int..
2019.02.14 -
[IntelliJ] 검색과 관련된 단축키 정리
편집기를 이용해서 코드를 편집하다보면, 동일한 내용을 찾아서 일괄적으로 변경하고자 할 때가 있다. Replace all을 통해서 한번에 대체할 수도 있지만, 개인적으로는 검색한 내용과 일치하는 내용을 Multi-cursor로 선택한 후, 직접 수정하는 편을 더 좋아하는 편이다. Visual Studio Code나 Atom에서는 `Ctrl+D`를 통해서 선택할 수 있던 내용이다. IntelliJ에서는 `Alt+J`를 사용해서 동일한 기능을 수행할 수 있다. 함수 내에서 `multi_cursor_a`, `multi_cursor_b`라는 변수를 선언하여 사용하다가, 이를 낙타표기법(`multiCursorA`, `multiCursorB`)으로 변경하고자 한다면, `multi_cursor_`를 선택한 후 `Alt..
2019.02.14