목록Android (37)
라떼는말이야
시작하기 전에... 본 포스트에서 사용한 코드와 코드랩은 밑의 링크에서 다운 받아 사용할 수 있습니다. 단일 액티비티(MainActivity.kt)로 구성되어 있는 앱입니다. 직접 따라하며 익혀도 되고 빠르게 개념만 익혀가도 좋습니다 😎👍 앞 부분은 로그를 남기는 방법에 대한 설명이니 생명 주기에 대한 내용을 바로 보시려면 초록색으로 "액티비티 라이프 사이클" 라고 적힌 부분까지 쭉 내려가면 됩니다! 안드로이드 앱 GitHub - google-developer-training/android-kotlin-fundamentals-starter-apps: android-kotlin-fundamentals-starter-apps android-kotlin-fundamentals-starter-apps. Cont..
fun createNotificationChannel(context: Context) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationChannel = NotificationChannel( NOTIFICATION_CHANNEL_ID, "수업시작 알림", NotificationManager.IMPORTANCE_HIGH ) notificationChannel.description = "수업 시작 전 알림을 띄웁니다." notificat..
개요 일반적인 디자인에서 marginLeft와 marginStart는 동일한 효과를 가진다. 마찬가지로 marginRight와 marginEnd는 동일한 효과를 가진다. 하지만 margin을 주고자 하는 컴포넌트가 textView나 editText와 같은 문자와 관련된 컴포넌트라면 이야기가 달라진다. 언어별 특성 차이로 인해 발생하는 불편을 최소화하기 위해 Left대신 Start, Right 대신 End를 사용해야 한다. 언어별 특징 대부분의 문자는 왼쪽에서 오른쪽으로 쓰고, 읽는다. 이를 LTR언어 라고 칭한다. 하지만 일부 언어(아랍어, 히브리어, 페르시아어, 우르두어 등)는 오른쪽 -> 왼쪽으로 쓰고, 읽는다. . 이를 RTL언어 라고 칭한다. 그림을 보면 이해가 갈 것이다. 영어와 같은 LTR언어..
UI 디자인 XML에서 모르는 부분은 댓글로 물어봐주세요. 따로 설명하지는 않겠습니다. Android - CountDownTimer 안드로이드에서 카운트다운을 위한 메소드를 제공해준다. public abstract class CountDownTimer 사용법은 다음과 같다. object : CountDownTimer(30000, 1000) { override fun onTick(millisUntilFinished: Long) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000) } override fun onFinish() { mTextField.setText("done!") } }.start() CountDownTimer의 인..
안드로이드 권한의 종류 안드로이드 앱을 사용할 때 주소록, 갤러리 등의 기기의 데이터나 gps, 오디오 녹음 등 특정 기능을 활용하기 위해 사용자에게 권한을 요청할 수 있다. 이처럼 사용 중 필요할 때 요청되는 권한을 런타임 권한(Runtime permissions)이라고 하고, 앱이 설치되면서 자동으로 부여되는 권한은 설치 시간 권한(Install-time permissions)이라고 한다. 설치 시간 권한에는 일반 권한과 서명 권한 등의 여러 하위 권한이 포함된다. 일반적으로 사용자의 개인 정보나 데이터를 사용하지 않는다. 런타음 권한은 다음과 같이 사용자에게 권한 허가 여부를 물어본다. 당연한 얘기지만 사용자가 앱을 사용할 때 반드시 필요한 권한만 요청해야한다. 이후 부터는 런타임 권한에 대한 이야..
Room은 안드로이드 개발 중 로컬 데이터베이스에 데이터를 저장하고자 할 때 사용한다. 만약 기기가 네트워크에 액세스할 수 없을 때 오프라인 상태인 동안에도 사용자가 여전히 콘텐츠를 탐색할 수 있으며 나중에 기기가 다시 온라인 상태가 되면 콘텐츠 변경사항이 서버에 동기화된다. Room은 위와 같은 문제를 자동으로 처리하기 때문에 안드로이드 개발자 페이지에서는 SQLite 대신 Room을 사용할 것을 적극적으로 권장한다고 되어있다. 우선 Room을 사용하기 위해서는 환경 설정이 필요하다. 환경 설정 프로젝트 창을 보면 Gradle Scripts 내부에 build.gradle (Module: 앱 이름.app) 이 있다. plugins 추가 가장 상단에 plugins가 있는데 id 'kotlin-kapt' 를..
기본 드라이브가 아닌 외장 SSD 혹은 외장하드에서 프로젝트 작업을 하다가 오류가 발생하셨나요? 이번주에 코틀린을 새로 공부하기 시작했다. 커넥트 재단 - 부스트 코스에서 코틀린 기본 문법을 학습 후 패스트캠퍼스에서 처음으로 유료 온라인 강의를 신청했다. 학원따위 다니지 않아도 된다는 신념이었는데, 막상 졸업까지 한 학기만 남겨놓은 상태에서 독학으로 수많은 기술 스택을 쌓을 생각에 아찔해져서 결제하게 되었다. 물론 커리큘럼이 너무나 마음에 들었다. 앞으로 강의를 들으며 만들어질 중간 산출물들을 종종 블로그에 올리려고 한다. 어쨌든, 호기롭게 안드로이드 스튜디오를 열어서 프로젝트를 새로 만들었다. 이전에 부스트코스에서 자바로 안드로이드 강의를 들을 때는 이미 안드로이드 스튜디오 버전 차이 때문에 UI 차이..
해결 과정 - 안드로이드 카페, 안드로이드 질문 카톡방, 구글링 등 여러 방법을 시도해봤지만 확실한 해결책을 찾지 못함. - 친구와 코드리뷰를 하며 문제점을 발견하고 해결할 수 있었음 문제 원인 문제의 원인은 프래그먼트를 다루는 것에 대한 미숙함 때문이었다. 우선 착각한 부분이 프래그먼트에 있는 EditText에 글자를 입력하고 다음 프래그먼트로 넘어갔다가 돌아오면 기존에 입력했던 글자가 그대로 남아있었기에 단순히 TextView에 setText를 하고 화면이 갱신 안 된 문제로 판단했다. 하지만 내가 프래그먼트를 새로 생성했던 것. onChangeFragment 함수에서 signInPage2 = new RegisterFragment2();로 새로운 프래그먼트 객체를 생성하고 그 객체를 갖다 붙인 것이었..