전체 글

Glion 의 안드로이드 개발노트
TextSize "dp" 로 고정해 둔 값이 풀리는 경우
기기마다 다르게 적용되는 반응형 UI를 충분히 구현하지 못해 차선책으로 TextSize를 dp로 고정하는 방식을 사용하여 프로젝트를 진행하던 중, 동영상을 재생하는 Activity로 이동했다가 동영상이 종료되어 다시 MainActivity로 이동하였을 때 고정해둔 값이 풀리는 현상을 발견하여 이에 대해 정리한다. 예시로 제시하고 있는 코드는 실제 프로젝트와 동일한 흐름으로 동작하도록 만든 샘플 프로젝트이다. 먼저, 이 글이 여러분들의 프로젝트에 적합한 해결책을 제시하는지, 옳은 해결책인지는 확신하지 못함을 미리 말씀드린다. 프로젝트 흐름상 적합하지 않을 수 있고, 더 나은 방법이 존재할 수도 있다. 하지만 필자가 해당 문제에 대해 해결하기 위해 구글링을 할때 마땅한 해결책이 나오지 않았기에 한명에게라도 ..
[Android] ViewBinding
Android 앱을 만들때, 제일 처음에 " findViewById(R.id.***) " 을 이용하여 xml에 작성한 View를 가져와 특정한 작업을 하는 방법을 배운다. 이런 작업에는 View를 가져와 저장할 변수, 해당 변수에 findViewById 를 사용하여 가져오는 작업이 필요하다. 그러나 프로젝트의 규모가 커질수록, findViewById 코드의 양은 점점 많아질 것이고, onCreate의 길이도 길어질 뿐더러 findViewById로 가져온 View 를 저장할 변수 또한 매우 많아질 것이다. 또한 존재하지 않는 id를 가져오도록 하여 NullPointerException의 위험 또한 존재한다. 이러한 findViewById의 단점이 나타나자, 이를 대체할 ButterKnife 라던지, 지금은..
[Kotlin] Null-Safety ?. !! ?:
Kotlin의 특징 중 "Null-Safety한 언어" 라는 것이 있다. 일을 하며 ?. !! ?.let 등 여러 nullable한 값에 대해 처리를 했는데, 차이점을 모르고 그냥 사용한 것 같아 공식문서를 보고 각 연산자의 특징과 왜 Null-Safety 한 언어라고 하는지 알아보았다. 지금부터 그 내용을 정리하며, 블로그에 남긴다. NullPointerException 자바를 비롯한 대부분의 언어에서 흔히 볼 수 있는 에러는 NullPointerException 이다. Null을 참조하는 멤버에 접근하려고 했을 때 발생하는 에러이며, 공식문서에서는 NPE라고 하고 있다. kotlin에서 NPE가 일어날 수 있는 가능성은 다음과 같다. 1. 의도적으로 NullPointerException을 발생시킬때(..
[Android] onSaveInstanceState 사용하여 상태 유지하기
플레이스토어에서 앱을 다운로드 받아 사용할 때, 화면 방향을 바꾼다던지, 앱을 켜둔 상태로 다크모드를 킨다던지, 멀티윈도우로 전환한다던지 하는 행동을 하곤 한다. 이때 앱에서 표시하고 있는 데이터가 변경된다거나, 만약 게임을 하던 중 화면 방향을 바꿨는데 게임이 처음부터 시작된다면 이는 앱의 옳은 동작이 아닐 것이다. 하지만 우리가 직접 만들어본 앱은 어떤가? 리스트에 아이템을 추가하는 앱을 만들었다고 했을 때 화면을 돌려보면 그 아이템이 유지가 되는가? 아마 아닐 것이다. 왜 이렇게 되는지, 그리고 상태를 유지하는 방법에 대해 알아보자. 상태가 유지되지 않는 이유 Activity의 수명주기는 다음 그림과 같다. Activity 의 종료는 onResume() 상태에서 onPause, onStop을 거쳐 ..
[Android] inflate 에 대해 알아보기
더보기 Android 앱 개발을 하다보면 Fragment 를 사용하거나, 하다못해 들어봤을텐데, 이런 형태일 것이다. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_example, container, false) } 이 Fragment 의 onCreateView에서 return 하는 inflater.inflate... 대체 뭐길래 View 타입으로 반환되는 것일까? Fragment 는 추후에 좀 더 자세히 공..
[Android] Thread 기본
Thread..? 안드로이드 앱 개발 뿐만이 아니라 컴퓨터 언어로 무언가를 개발하는 모든 개발자들은 Thread에 대해 듣게 된다. 이 Thread 란 무엇일까? Process 와 Thread Process 는 간단하게 하나의 프로그램을 의미한다. 그리고 Thread는 이 Process 내에서 작업을 수행하는 주체이다. 아무것도 동작하지 않는 Process(프로그램) 은 프로그램이라고 할 수 없다. 아주 간단한 기능이라도 어떤 기능 한가지는 무조건 수행하는데, 이러한 작업은 Thread에서 수행한다. 따라서, Process에는 무조건 한개 이상의 Thread가 존재한다. 안드로이드 앱 개발에는 UI Thread(Main Thread)가 무조건 존재하고, 개발에 따라 다수의 Worker Thread 가 존..
[Android] RecyclerView 이해하기 (3) - 중복선택 방지, notifyDataSetChanged()
앞의 두 포스팅을 봐주세요 https://gangglion.tistory.com/8 [Android] RecyclerView 이해하기 (1) 안드로이드에서 다량의 데이터를 표시할때, 리사이클러뷰를 많이 사용한다. 그동안 아무생각없이 사용했던 리사이클러뷰에 대해 확실하게 정리할 것이다. 안드로이드 개발자 문서에는 다음과 gangglion.tistory.com https://gangglion.tistory.com/9 [Android] RecyclerView 이해하기 (2) - RecyclerViewAdapter 내부요소를 외부에서 사용하는 방법 지난번 포스팅에서 리사이클러뷰에 대해 정리하고 아이템을 넣어보았다. 이번 포스팅에서는 interface를 사용하여 Adapter에 있는 pos와 같은 값을 MainA..
Platform declaration clash: The following declarations have the same JVM signature 에러
Kotlin의 범위함수 apply에 대해 공부하면서 예제코드를 작성할 때였다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) applyFunction() } inner class Person(){ var name: String?= null var age: Int? = null fun getName(): String?{ return name } } private fun applyFunction(){ val person = Person().apply{ name = "ApplyTest" age = 1 }.getName() Log.d..
Glion
Glion 의 안드로이드 개발노트