초급 3.비밀 다이어리

mangyun·2021년 11월 7일

초급 앱개발

목록 보기
3/8

정리

  • packed를 이용해 각 붙여서 사용
    app:layout_constraintHorizontal_chainStyle="packed"
    spread는 일반적이고, spread_inside는 끝에 벌어짐.

  • 뷰 자체를 ConstraintLayout으로 변경해 크기를 조절

가중치 조절

  • app:layout_constraintVertical_bias="0.5"

font는 외부에서 다운받아 res에 따로 다운(대문자는 안됨)

botton같은 위젯은 res - values - themes의 parent 영향을 받기때문에 MaterialComponents의 영향을 받지 않는 AppCompatButton을 사용

title을 제거하기위해 NoActionBar를 따로 themes에 스타일을 등록하고, manifests에서 테마를 추가

<style name="Theme.Secret_diary.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar"/>

lazy변수

//lazy로 선언한 이유는 onCreate함수보다 먼저 선언했기 때문
   //여기서는 apply를 이용해 lazy변수에 바로 min, max로 초기화함.
    private val numberPicker1: NumberPicker by lazy {
        findViewById<NumberPicker>(R.id.numberPicker1)
            .apply {
                minValue = 0
                maxValue = 9
            }
    }

password 불러오기

//password를 저장하는 방법은 로컬DB나 파일에 직접 저장
//여기서는 SharedPreferences를 이용
 //이 파일을 다른 앱에서 사용못하게 MODE_PRIVATE으로 선언
            val passwordPreferences = getSharedPreferences("password", Context.MODE_PRIVATE)

경고문 만들기
 AlertDialog.Builder(this)
                    .setTitle("실패!!")
                    .setMessage("비밀번호가 잘못되었습니다.")
                    .setPositiveButton("확인") { dialog, which -> }//원래는 dialog, which지만 불필요한 코드생략으로 인해 _, _ 표현
                    .create()
                    .show()

NoActionBar

themes에  <style name="Theme.Secret_diary.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar"/> 처럼 저장

경고문 만들기

 AlertDialog.Builder(this)
                    .setTitle("실패!!")
                    .setMessage("비밀번호가 잘못되었습니다.")
                    .setPositiveButton("확인") { dialog, which -> }//원래는 dialog, which지만 불필요한 코드생략으로 인해 _, _ 표현
                    .create()
                    .show()

핸들러

  • 메인 쓰레드와 새로운 쓰레드를 연결.
private val handler = Handler(Looper.getMainLooper()) //메인 쓰레드를 연결

//내용이 바뀔때마다 호출되는 리스너, 멈칫할때 저장되는 시스템
        diaryEditText.addTextChangedListener {
            handler.removeCallbacks(runnable)//0.5초 이전에 있는 runnable을 지우기 위함.
            handler.postDelayed(runnable, 500) // 0.5초에 한번씩 저장

참고

저장하는 방법은 commit이나 apply 두가지
commit은 ui 쓰레드 블록으로 끝날때가지 기다림 무거운 ui를 실행할수록 오래기다려서 앱이 죽을 수 있음
apply는 비동기적으로 바로 처리

profile
기억보다는 기록을 하자.

0개의 댓글