Android 32

uses-feature required

AndroidManifest에 카메라 권한을 선언하는 부분에서 빨간 줄이 생겼다. 마우스를 갖다 대보면 uses-feature가 빠졌다는 내용이다. uses-feature는 보통 구글 플레이에 앱의 노출 여부를 결정할 때 많이 사용한다. 예를 들어서 카메라를 사용하는 앱인데, 카메라가 없는 안드로이드 기기에서도 검색 또는 설치가 되게 할 것인지 말 것인지를 결정할 수 있다. 만약 카메라 사용이 필수라면 당연히 required="true"가 되어야 할 것이고, 카메라 기능이 옵션이라면 required="false"로 선언하면 되겠다. 이제 아래 코드를 넣으면 빨간 줄이 사라질 것이다. 카메라뿐만 아니라 블루투스(bluetooth), NFC 등 안드로이드 기기의 하드웨어 존재 유무에 따라서 각각 선언하면 된..

Manifest merger failed : Attribute application@allowBackup value=(false)

안드로이드는 앱 삭제 후 재설치시 백업 되어있던 내부 데이터가 복구되는데, AndroidManifest.xml 파일에 android:allowBackup="true"이 default 값으로 되어있기 때문이다. 이게 좋은거 같지만 구글 플레이로부터 앱을 설치하게 되면 처음 상태에서 실행이 되어야 제대로 된 로직을 탈 수 있는데 데이터가 복구되어 그렇지 않은 케이스로 가다보니 오류가 발생할 때가 있고, 그런것에 대한 처리를 다 해주기가 번거롭다. 그래서 android:allowBackup="false"로 바꾸고 앱을 재설치 하더라도 처음 실행하는 것처럼 하는게 속 편하다. android:allowBackup="false"로 바꾸면 Manifest merger failed가 발생하는 경우가 있는데, 이 에러에..

[android] Disable ActionBar show/hide animation

Single Activity 구조로 UI 설계를 하기 위해서는 Navigation을 이용하여 모든 화면 단위를 Fragment로 개발을 한다. 혹시 특정 Fragment에서 ActionBar를 숨겨야 할 때가 있다면 supportActionBar의 show(), hide() 함수를 이용하면 된다. 하지만 한가지 거슬리는건 show/hide 될 때 애니메이션이 나오는데, 그게 보기 싫다면 setShowHideAnimationEnabled(false) 를 호출하여 해결할 수 있다. @SuppressLint("RestrictedApi") override fun onStart() { super.onStart() val supportActionBar = (requireActivity() as AppCompatAc..

android CornerRoundedImageView (ImageView 라운드 처리하기)

android ImageView에 라운드 처리를 하기 위해서 res/drawable/ 에 background.xml을 만들어 적용하는 방법이 있지만, ImageView를 상속시킨 UIView를 직접 만들어 사용해도 된다. package cloud.shoplive.sdk.ui import android.content.Context import android.graphics.Canvas import android.graphics.Path import android.graphics.RectF import android.util.AttributeSet import android.widget.ImageView class CornerRoundedImageView: ImageView { companion object..

android 비트맵 라운드 처리 (Rounded Bitmap)

안드로이드에서 이미지 작업을 쉽게 할 수 있도록 제공되는 서드파티 라이브러리가 많이 있지만, 때로는 서드파티 라이브러리를 사용할 수 없어서 직접 핸들링을 해야 하는 경우가 있다. private fun getRoundedCornerBitmap(bitmap: Bitmap): Bitmap? { val output = Bitmap.createBitmap( bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888 ) val canvas = Canvas(output) val paint = Paint() val rect = Rect(0, 0, bitmap.width, bitmap.height) val rectF = RectF(rect) val roundPx = 20f paint...

android ExoPlayer PlayerView Corner Rounded

OS Pip를 사용하지 않고 직접 구현해야 할 때가 있는데, PlayerView를 좀 예쁘게 가다듬기 위해서 코너에 라운드 모양을 만들 수 있는 코드가 있어서 적용했다. @RequiresApi(Build.VERSION_CODES.LOLLIPOP) playerView.outlineProvider = object : ViewOutlineProvider() { override fun getOutline(view: View, outline: Outline) { outline.setRoundRect(0, 0, view.width, view.height, 20f) } } @RequiresApi(Build.VERSION_CODES.LOLLIPOP) playerView.clipToOutline = true