본문 바로가기
반응형

Tips37

[Android] RecyclerView 스크롤 비활성화 Intro Android에서 RecyclerView를 사용할 때 스크롤을 비활서화하고 싶을 때가 있다. 하지만 기존의 스크롤 활성화 여부를 설정하는 setLayoutFrozen이 Deprecated 되었는데, 이제는 아래와 같은 방법으로 스크롤 활성화 여부를 변경할 수 있다. 스크롤 비활성화 recyclerView.suppressLayout(true) 스크롤 활성화 recyclerView.suppressLayout(false) suppressLayout을 true로 설정해두면 notifyXXXChanged로 인한 Layout 업데이트 작업이 일어나지 않게 된다. 따라서 데이터가 변경되어야 할 경우 잠깐 false로 설정했다가 notify 후 true로 바꿔주면 된다. recyclerView.suppres.. 2022. 5. 17.
[Android] Vibrator 클래스로 진동 제어하기 Intro 진행중인 프로젝트에서 진동 기능을 사용하게 되어 개발 중 조사한 내용을 정리해봤다. Vibrator 인스턴스 생성 진동을 제어하기 위한 권한 설정 코드이다. vibrator = getSystemService(Vibrator::class.java) 클래스로 getSystemService를 호출하면 SDK 버전에 관계없이 Vibrator 인스턴스를 반환해준다. Android API 31부터는 Context.VIBRATOR_SERVICE가 Deprecated 되어서 String으로 받아오고싶다면 아래와 같이 처리해야 한다. vibrator = if(Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { getSystemService(Context.VIBRATOR_SE.. 2022. 5. 16.
[Android] currentTimeMillis로 절대시간 구하기 Intro 앱 개발 도중 빌드 시간을 빌드번호로 만들기 위해 System.currentTimeMillis로 받은 현재 시간을 SimpleDateFormat 클래스를 통해 20220503101100과 같은 형식으로 변환해주는 코드를 작성했다. //BuildConfig.BUILDTIME: 빌드 시 호출된 System.currentTimeMillis() 결과값 binding.buttonTest.text = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()) .format(BuildConfig.BUILDTIME) 그런데 이 코드를 테스트폰과 AVD에서 실행시켰을 때, 둘의 현재 시간이 달라 빌드번호가 다르게 나왔다. SimpleDateFormat이 절대시간이 아닌.. 2022. 5. 3.
[Spring Boot] Infinite recursion (StackOverflowError) 오류 날 때 Intro Spring Repository에서 객체를 조회하는 도중에 아래의 에러가 발생했다. 2022-02-23 10:44:22.914 ERROR 58164 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion .. 2022. 2. 23.
[Android] Binding 사용 시 모든 요소가 아무 동작도 안할 때 Binding 사용 시 모든 요소가 아무 동작도 안할 때 viewBinding 사용 시 간혹 OnClick, OnCheckChange 등의 이벤트들이 하나도 동작하지 않을 떄가 있다. binding 사용 후 binding을 통해 이벤트를 등록했으면 그걸 보여주도록 설정을 변경해야 하는데, 기존 코드를 그대로 놔둬서 오류가 발생하는 것이었다. Activity의 경우 setContentView의 인자값을 binding.root로 변경해주면 된다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setCon.. 2022. 2. 9.
[Android] 오디오 모드 변경 및 볼륨 조절 권한 설정 소리 설정을 변경하기 위해 Write Settings 권한이 필요하다. AndroidManifest.xml Write Settings는 시스템 권한이라 앱 실행 시 자동으로 권한을 묻는 창이 뜨지 않기 때문에 설정 창을 띄워서 사용자가 직접 권한을 부여하도록 해야 한다. MainActivity.kt private fun requestWriteSettingsPermission() { if(!Settings.System.canWrite(this)) { Toast.makeText(this, "알림음을 켜기 위해 권한 설정이 필요합니다.", Toast.LENGTH_SHORT).show() startActivity(Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)) } .. 2022. 2. 7.
[Front-End] Prettier 단축키 보호되어 있는 글 입니다. 2022. 1. 27.
[Android] Ringtone 재생 및 목록 가져오기 Ringtone 재생 val ringtoneUri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM) val ringtone: Ringtone = RingtoneManager.getRingtone(context, ringtoneUri) ringtone.play() ringtoneUri 자리에 아래의 Ringtone 목록에 조회된 Uri로 대체할 수 있다. Ringtone 목록 가져오기 RingtoneManager(context).cursor.run { Log.d(TAG, "Ringtones: ") while(moveToNext()) { Log.d(TAG, "${getString(RingtoneManager.TITLE_COLUMN_INDEX).. 2022. 1. 24.
[CSS] 애니메이션이 떨릴 때 (will-changed) CSS 애니메이션이 떨릴 때 CSS에서 애니메이션을 적용시켰을 때 적용시킨 개체가 떨리는 경우가 가끔 있습니다. 주로 조그마한 개체에 애니메이션을 주었을 때 떨림 현상이 발생하는데, 이때 will-change에 애니메이션에서 변경하는 속성을 주어 실제 요소가 변화되기 전에 브라우저가 애니메이션을 최적화할 수 있게 해 주면 이런 떨림 현상을 방지할 수 있습니다. Ex) @keyframes heartBeat { 0% { transform: none; } 50% { transform: scale(1.2); } 100% { transform: none; } } h1 { animation: heartBeat 0.5s ease-in-out infinite; will-change: transform; } 실험 HTM.. 2022. 1. 12.
반응형