일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 티스토리
- submodule sourcetree
- 카페오냥
- java
- 안드로이이드 submodule
- Kotlin
- GIT
- 안드로이드
- 타이쿤
- gitlab submodule
- 앱개발
- Android
- 게임개발
- 서브모듈 pull
- 개발
- Android Studio
- 유니티
- DataBinding
- 2d게임
- 목서버
- 앱
- 서브모듈 sourcetree
- firebase
- 내 맘대로 정리한 안드로이드
- 안드로이드개발
- 코틀린
- github
- Unity
- 쿼터뷰
- github submodule
- Today
- Total
목록Android (45)
Uing? Uing!!
발단 EditText에서 사용자의 입력을 추적하기 위해 흔히 사용되는 방법이 이렇게 TextWatcher를 붙이는 것이다. binding.editTextView.addTextChangedListener(object: TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { // 텍스트 변경 전 // s: 기존 문자열, start: 커서 시작 위치, count: 변경 대상 문자 수, after: 변경 후 문자 수 } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { // 텍스트 변경 시..

LeakCanary 안드로이드에서 메모리 누수는 흔한 문제이다. 메모리 누수가 발생하는 경우는 다양하지만, 특히 context를 잘못 사용할 경우에 흔히 발생한다. 발생하기 쉬운 문제이지만, 프로젝트의 범위가 방대할 경우 프로파일링 기능을 사용하더라도 정확히 어디에서 메모리 누수가 발생하는지 바로 파악하기 어려울 때가 있다. LeakCanary는 이런 메모리 누수 상황에서 정확히 어디에서 누수가 발생하는지를 분석하고 알려주는 라이브러리이다. 적용법 적용법은 아주 간단하다. app단의 build.gradle에 leakcanary 의존성을 추가해주면 끝이다. 물론 디버깅 상태에서만 활용할 것이므로 debugImplementation으로 추가한다. debugImplementation 'com.squareup...

라이브러리와 리소스 안드로이드 라이브러리를 개발할 때에는 리소스와 관련해서 신중하게 접근할 필요가 있다. 앱에서 라이브러리를 implementation했을 때, 라이브러리에서 정의한 리소스명들이 그대로 노출 및 사용되기 때문이다. 이때 라이브러리 내부의 리소스와 실제 앱 개발 작업이 직접적으로 엮이는 부분은 두 가지가 있다. 1) 앱과 라이브러리에 동일한 이름을 갖는 리소스가 있다면, 라이브러리의 리소스는 무시된다. 2) 앱 개발 중 라이브러리의 color, string 등 리소스가 자동완성 등에 직접 노출되고, 실제로 사용할 수도 있다. 1번의 경우 간단한 이야기이지만 이 포스팅의 논점은 아니니 다른 포스팅에서 다루는 것으로 하고, 2번이 일어나는 이유는 라이브러리 내부의 모든 리소스는 기본적으로 공개..

기본적으로, 하나의 패키지명은 하나의 고유한 앱을 의미한다. 그리고, 같은 패키지명을 가진 앱은 같은 기기에 설치될 수 없다. 그러므로, 같은 앱은 기기에 두 개 이상 설치할 수 없다. 하지만 같은 종류의 앱을 여러 타입, 또는 여러 버전으로 나누어 빌드하고 싶을 수도 있다. 아래 두 상황을 대표적인 예로 들 수 있다. (공식 문서에서도 이 두 가지를 예로 들어 설명한다.) 1) 출시용과 디버그용 앱을 분리하기 위해서 - 이 경우 디버그용 앱에는 몇 가지 기능들이 추가될 것이다. 2) 무료앱과 유료앱을 분리하기 위해서 - 이 경우 무료앱에서는 유료앱의 기능들이 잠김 상태로 표시될 것이다. 이런 경우에 사용할 수 있는 것이 Build Varients(빌드 변형)이다. Build Varients(빌드 변형)..
발단 DrawerLayout을 처음 사용하면서 했던 아주 가벼운 삽질이다. (이 다음 포스팅으로 DrawerLayout에 대해 작성할 듯) 작업 중이던 레이아웃에는 EditText가 있었고, 좌측 메뉴를 누르면 이 EditText를 가리는 DrawerLayout이 나타나게 되어 있었다. 그런데, 좌측의 메뉴를 누른 후에는 EditText가 보이지 않음에도 불구하고, DrawableLayout의 빈 공간(EditText가 숨겨져 있는 공간)을 클릭하니 키보드가 올라온 것이다. 삽질 처음에는 내가 레이아웃의 해당 위치에 다른 버튼 동작을 달아 놓은 줄 알고 코드를 찾아 보았지만 그런 코드는 없었다. 결국 이 스택오버플로 답변을 보고, '앗... 알고 있던 거였는데...' 하며 수정했다. 삽질일기를 열심히 써..

안드로이드에서 화면을 그리다 보면 그림자가 있는 뷰를 만들어야 하는 일이 많다. 이런 식으로 배경에 그림자를 주기 위해서는 아예 배경 이미지 또는 drawable이 그림자를 갖도록 만들어버리는 방법이 있다. 하지만 elevation을 사용하면 따로 그림자가 포함된 리소스를 만들지 않고도 이렇게 그림자를 줄 수 있다. Elevation Elevation은 xml layout에서 뷰에 줄 수 있는 속성으로, API21부터 추가되었다. 레이아웃에서 그림자를 주고자 하는 뷰에 단순히 elevation을 dp값으로 집어넣어 주는 것만으로 그림자 표현이 가능하다. 아래 코드는 위에 첨부된 사진에 해당하는 레이아웃이다. Elevation 속성으로 넣어주는 dp값은 뷰의 z축, 즉 '높이'에 해당한다. 따라서 5dp,..

웹뷰와 디버깅 오늘은 회사에서 새로 알게 된 크롬의 디벨로퍼 기능을 정리해둘 겸 블로깅하려 한다. 웹뷰를 가지고 작업을 하다 보면, 디버깅이 쉽지 않다. 웹개발이라면 일반 크롬 창에서 개발자 툴로 디버깅을 할 수 있을 것이고, 안드로이드 네이티브 화면이라면 ide의 디버깅 툴을 사용하거나 로깅할 수 있겠지만, 웹뷰는 안드로이드 에뮬레이터에서 돌아가면서도 내용을 직접 확인하거나 건드리기가 어렵다. Chrome DevTools 하지만 Chrome DevTools의 기능을 사용하면 연결된 디바이스의 웹뷰를 마치 PC 크롬 브라우저에서 관찰하듯 관찰할 수 있다. 기능의 사용 방법 또한 무척 간단하다. 이 기능을 사용하기 위해서는, 1. 우선 웹뷰에서 디버깅을 활성화시킨다 WebView.setWebContents..
처음 안드로이드를 접하면, 화면에서 원하는 뷰에 접근하기 위해 findViewById 메소드를 사용하게 된다. 아, 요즘은 기초를 배울 때 코틀린 extensions를 사용하는 방식이 더 보편적일지도 모르겠다. 코틀린 익스텐션의 방식 역시 각 뷰에 캐싱을 걸어서 반복작업을 조금 줄여줄 뿐, 내부적으로는 이 findViewById 메소드를 사용하고 있다. 코틀린 extensions에 대해서도 이야기할 부분이 많지만, 우선은 findViewById 메소드를 들여다보고자 한다. findViewById의 동작 방식 기본적으로 findViewById 메소드는 id값을 이용해 특정 뷰를 받아와주는 메소드로, 액티비티, 프래그먼트, 뷰홀더 등에서 다양하게 사용이 되곤 했다. 이 메소드를 이용해 텍스트뷰를 가져와 데이..