Android (57) 썸네일형 리스트형 Koin을 통해 의존성 주입하기 0. 의존성 주입에 대해서 1) 의존성(Dependency)이란? 현재 객체가 다른 객체와 상호작용을 하고 있다면 현재 객체는 다른 객체에 의존성을 가진다고 합니다. 의존성이 높은 경우, 하나의 모듈이 바뀌면 의존하고 있던 다른 모듈까지 변경되어야 합니다. 또한 두 객체 사이에 의존성이 존재한다면 단위 테스트를 하기 어려워집니다. 따라서 이를 해결하기 위해 의존성 주입 개념을 도입할 수 있습니다. 2) 의존성 주입(Dependency Injection)이란? 내부에서 객체를 생성하는 것이 아니라, 외부에서 객체를 생성하여 의존성을 주입해주는 것입니다. a. 장점 코드의 재사용성을 향상시키고, 더 간결하게 코드를 작성할 수 있습니다. 또한 객체의 생성과 사용을 분리시켜 종속된 코드를 줄여줍니다. 이를 통해.. ListView와 RecyclerView의 차이점 안녕하세요? 닉네임간편입니다. 앱을 개발하면서 화면에 아이템을 나열하여 보여야 할 때가 많은데요, 그럴 때 유용하게 사용하는 것이 바로 리스트뷰(ListView)와 리싸이클러뷰(RecyclerView)입니다. 둘의 기능이 유사하다 보니 한 요소만 사용하거나 혹은 두 요소를 혼동해서 사용하는 경우도 있었는데요, 이번 시간에는 이 둘의 차이점에 대해서 자세히 다루어보겠습니다. 1. 책임(Responsibility) 여기서 '책임'이라는 말은 어떤 기능을 구현함에 있어서 주요한 역할을 한다는 것을 의미합니다. 리스트뷰는 해당 클래스 내부에서 자체적으로 많은 것들을 설정할 수 있습니다. 따라서 리스트뷰는 해당 클래스가 모든 '책임'을 갖고 있다고 볼 수 있습니다. 반대로 리싸이클러뷰는 해당 클래스 자체에서 많은.. android:exported 안녕하세요? 닉네임간편입니다. 이번 시간에는 제목의 에러에 대해서 다루어보겠습니다. 1. 에러 전문 Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined 2. 발생 원인 앱의 targetSdkVersion이 31 이상이면, 즉 안드로이드 12 이상을 타겟으로 설정했다면 애플리케이션의 모든 구성요소에 대해서 android:exported를 명시해주어야 합니다. 이전에는 이것이 default로 값이 설정되었지만, 이제는 모두 명시적으로 설정해주어야 합니다. 만일 다른 애플리케.. 뷰페이저(ViewPager) 관련 짜투리 지식 1 (스와이프 및 애니메이션 제거, 스와이프 속도 조절) 1. 스와이프 및 애니메이션 제거 우선 뷰페이저에 isUserInputEnabled 속성을 false로 설정하면 사용자의 스와이프 이벤트를 막을 수 있습니다. binding.refrigeratorViewpager.run{ isUserInputEnabled= false } 그리고 만일 뷰페이저와 탭 레이아웃을 같이 사용한다면, 탭 레이아웃에 아래와 같이 설정하면 애니메이션 또한 제거할 수 있습니다. binding.refrigeratorTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab?) { tab?.position?.let{binding.. 텍스트뷰(TextView) 관련 짜투리 지식 2 (더보기 설정) 1. 개요 앱에서 긴 글을 표시할 때 '더보기' 기능을 설정해서 사용자가 원하는 글만 자세하게 볼 수 있도록 설정할 수 있습니다. 그러나 이는 자체적으로 지원해주는 기능은 아니기에 직접 만들어서 구현해야 하는데요, 물론 라이브러리를 사용할 수도 있지만 직접 구현하는 것도 좋은 경험이라고 생각합니다. 지금부터 자세히 알아보겠습니다. 2. 전체 코드 binding.itemSpecificReviewContent.text = description binding.itemSpecificReviewContent.run { doOnLayout { post { val lineCount = binding.itemSpecificReviewContent.lineCount if (lineCount > 3) { binding.i.. 텍스트뷰(TextView) 관련 짜투리 지식 1 (특정 문자열 색상 설정, 밑줄 긋기, 특정 문자열 폰트 설정) 1. 특정 문자열 색상 설정 텍스트뷰의 문자열에서 특정 구간의 색상을 따로 설정하고 싶은 경우가 있습니다. 이 경우 아래와 같이 사용하면 됩니다. val keyword = item.keyword if (keyword != null && item.name.indexOf(keyword) != -1) { val start = item.name.indexOf(keyword) val end = keyword.length + start var spannableString = SpannableString(item.name) spannableString.setSpan(ForegroundColorSpan( Color.parseColor("#FFFAD225")), start, end, Spannable.SPAN_EXCLU.. 안드로이드 화면 전환 애니메이션(+ 화면에 보이는지 여부에 따라 애니메이션 다르게 설정) 안녕하세요? 닉네임간편입니다. 이번 시간에는 화면 전환 애니메이션에 대해서 알아보겠습니다. 화면을 전환할 때 사용되는 애니메이션은 정말 다양하지만, 전 그중에서도 '공유 요소'를 활용하여 화면을 전환하는 애니메이션에 대해 다루겠습니다. 다음 이미지와 같이 이전 화면의 이미지뷰가 전환되는 화면과 '공유'하여 마치 연속되는 것처럼 화면이 전환되는 애니메이션을 구현할 것입니다. 1. 화면 전환하기 전 화면 처리 화면 전환 애니메이션을 만들려면 먼저 화면을 전환하기 이전 화면에서 처리해야 하는 부분이 있습니다. 전체 코드는 아래와 같습니다. val intent = Intent(this@SearchBeerActivity, BeerSpecificActivity::class.java) intent.putExtra(B.. 에디트텍스트(EditText) 관련 짜투리 지식 2 (한 줄로 입력받기, 엔터키 이벤트, 키보드 사라지게 만들기) 1. 한 줄로 입력받기 xml 파일에서 maxLines 속성을 1로 설정하면 한 줄로 입력받을 수 있습니다. 이때 inputType을 반드시 명시해주어야만 제대로 동작합니다. 예를 들어 inputType을 text로 설정해주면 됩니다. 2. 키보드 사라지게 만들기 val inputMethodManager: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager // 키보드 사라지게 하는 코드 inputMethodManager.hideSoftInputFromWindow(currentFocus!!.windowToken, 0) inputMethodManager를 먼저 생성한 후, 이를 사용해서 키보드를 사.. 이전 1 2 3 4 5 ··· 8 다음