목록분류 전체보기 (105)
우찬쓰 개발블로그
activity animation에 대하여 정보를 찾아보면 보통 다음과 같은 방법을 찾을 수 있다. 스타일에 두 옵션에 대한 아이템을 지정하는 방법이다. 하지만 이 방법은 문제가 있는데, 엑티비티를 push 할때와 pop 할때의 애니메이션이 동일하게 지정된다는 것이다. 대부분의 요구사항은 push할때와 대칭이 되도록 pop이 반대의 애니메이션을 가져야하므로 세부 옵션이 필요하다. 이 경우를 위한 대안은 다음과 같다. 이렇게 하면 activity를 open할때와 close 할때에 대한 각 animation의 세부 조정이 가능하다. 각 애니메이션 style의 코드도 추가해 두겠다. 추가로 투명도 조절도 할 수 있는데, 다음처럼 하면된다.
안드로이드에서 status bar와 navigation bar를 둘다 투명으로 바꾸는 방법은 다음처럼 널리 알려져 있다. window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) 하지만 status bar만 투명으로 만들고 싶을 때가 있는데, 이 방법은 생각보다 찾기가 어렵다. status bar만 투명으로 만들때는 다음처럼 하면된다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_ST..
안드로이드 8부터는 NotificationChannel이 필수가 되면서 다루기가 복잡해 졌는데, 거기다가 설정도 잘 안먹으니 답답한 노릇이다. 본론으로 들어가서, 오레오 이상부터는 다음처럼 꼼수로 진동을 꺼야한다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel( channelId, getString(R.string.push), NotificationManager.IMPORTANCE_LOW // 진동 끄기 ) channel.setShowBadge(true) channel.vibrationPattern = longArrayOf(0) // 진동 끄기 channel.enableVibration(true..
공유하기 기능은 크게 두가지로 나눌 수 있다. 1. 각 SNS별 SDK를 이용하는 방법 (카카오톡 등) 2. 인텐트로 action을 보내는 방법 이 외에도 공유하기는 메일이나 문자가 될 수도 있다. 1번으로 구현을 하려고 한다면 주의할 점은, 모든 SNS플랫폼이 SDK를 가지고 있는 것은 아니다. 각 SNS마다 공유하기 버튼을 직접 만들어 주어야하고 각 SNS마다 공유하기 로직을 해당 SNS플랫폼에 맞게 구현해 주어야 한다. 하지만 2번의 인텐트로 action을 보내는 방식은 OS에서 공유하기 System UI를 띄워주므로 작업량을 많이 줄일 수 있다. (아래는 코드 예시) val intent = Intent(Intent.ACTION_SEND) intent.type = "text/plain" intent..
안드로이드의 이미지뷰는 다양한 scaleType 옵션이 있다. 하지만 이 옵션만으로 모든 디자인 요구사항을 맞추기는 힘든데, 대표적으로 이미지 비율을 맞춰달라는 요구사항이 있다. 이 부분에 대해서는 scaleType 옵션이 아니라 adjustViewBounds 옵션을 사용해야 된다. 아래 코드는 width를 match_parent로 두고 높이값을 비율에 맞게 조절하는 예시이다.
Viewpager에서 마지막 page에 스크롤을하면 추가적으로 더 스크롤 할 페이지가 없다는 효과가 나타나게 된다. 이 색상을 없애려면 xml에서 Viewpager의 한가지 옵션을 추가해 주면 된다. 테스트 해보면 더이상 해당 효과가 나타나지 않는 것을 볼 수 있다.
안드로이드 개발을 하다보면 URL을 정의해야 하는 경우가 생긴다. 어떤 개발자들은 하드코딩으로 코드상에 URL을 넣어버리고 test, staging, real 서버를 주석을 풀어가면서 붙는 서버를 바꿔주기도 하는데 이는 굉장히 구리고, 실수의 여지가 있는 안좋은 방법이다. 그래서 우리는 Gradle에서 각 URL 세팅을 명시하고 세팅해 보도록 하자. 먼저 app 수준의 gradle로 가보자. android { compileSdkVersion 28 defaultConfig { applicationId "test.test.test" minSdkVersion 19 targetSdkVersion 28 versionCode 34 versionName "1.1.0" testInstrumentationRunner "..
앱을 개발하다보면 현재 앱이 Foreground 상태인지 Background 상태인지 체크해야 하는 상황이 온다. 예전에는 이러한 상태를 각 엑티비티 마다 체크하는 로직을 넣어서 종합하여 현재 앱이 백그라운드인지 포어그라운드 인지 결정해야 했는데 구글이 AAC 라이브러리를 발표하면서 훨씬 간단한 방법이 생겼다. 먼저 app.gradle에 라이브러리를 추가한다. implementation 'android.arch.lifecycle:extensions:1.1.1' 그다음 구현해놓은 Application에 다음과 같은 코드를 추가한다. class TestApplication: Application(), LifecycleObserver { override fun onCreate() { super.onCreate..
기존 자바에서 Parcelable을 만드려면 잡다한 보일러 코드들을 추가해야 했다. 하지만 코틀린은 역시 친절하게도 이 작업을 줄일 수 있는 방법을 고안해 주었는데, 아직 실험단계라고 하니 코틀린을 믿는자만 쓰도록 하자.(믿숩니다!) 먼저 실험적 문법을 사용하기 위해서는 앱 수준의 gradle에 다음을 추가하자. androidExtensions { experimental = true } 실험적 코드의 사용 여부를 true로 바꾼것이다. gradle sync를 한 다음 만들어둔 data class로 가보자 data class Test(val test1: Int, val test2: String, val test3: Float) 여기서 다음과 같이 어노테이션과 상속을 추가하자. @Parcelize data ..
안드로이드가 오레오, 파이로 넘어가면서 백그라운드 서비스를 다루기가 점점 어려워지고 있다. 사실 어려워진다는 얘기도 백그라운드에서 서비스를 돌리면서도 Notification을 띄우지 않는 기술에 대한 꼼수(?)가 어려워 지고 있는거지 Notification이 뜨든 말든 상관없는 초보자들은 더 혼동이 오기 마련이다. 그래서 안드로이드 초보자의 기준에서, 안드로이드의 백그라운드 서비스를 공식적인 방법으로 띄우는 방법에 대해 알아보자. 여기서 용어를 정의하고 넘어가야 하는데, 앱이 죽든 말든 백그라운드에서 서비스를 죽지않게 하고 싶다면 이것을 포어그라운드 서비스 라고 한다. 따라서 이하 포어그라운드 서비스 라고 부르겠다. 먼저 서비스를 만들어야 하는데 생각보다 간단하다. 서비스를 상속받은 예제 서비스를 만들자..