목록안드로이드 (77)
우찬쓰 개발블로그
1. 프로가드 # 소스 파일 변수 명 바꾸는 옵션. -renamesourcefileattribute SourceFile # 어노테이션 바꾸지 않는 옵션. -keepattributes *Annotation* # 소스 파일의 라인을 섞지 않는 옵션. -keepattributes SourceFile,LineNumberTable -keep public class * extends java.lang.Exception 2. build.gradle에 minifyEnabled 체크 3. manifests - 각 엑티비티 launch mode ( splash는 singleTop, 나머지는 singleTask) - 각 엑티비티 screenOrientation (예외사항을 제외하고 portrait로 고정) 4. 각 disp..
안드로이드 툴바에는 기본적으로 좌측에 대하여 padding 값이 들어가있다. 이것을 지우기 위해선 다음처럼 두가지 옵션을 주도록 하자. 간단하다
안드로이드 앱을 업데이트하면 foreground service가 있는 앱일 경우에는 업데이트 후 앱을 실행시키지 않아도 서비스를 바로 실행시켜줘야 하는 경우가 있다. 이 경우, BroadcastReceiver를 만들어서 해당 이벤트를 받아서 서비스를 실행시키도록 처리하면 된다. 일단 manifest에 다음과 같이 코드가 들어가야한다. 그다음, 브로드캐스트를 상속받아 이벤트를 처리할 클래스를 만든다. class TestBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action.equals(Intent.ACTION_MY_PACKAGE_REPLACED, tr..
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 "..