packed를 이용해 각 붙여서 사용
app:layout_constraintHorizontal_chainStyle="packed"
spread는 일반적이고, spread_inside는 끝에 벌어짐.
뷰 자체를 ConstraintLayout으로 변경해 크기를 조절
<style name="Theme.Secret_diary.NoActionBar" parent="Theme.MaterialComponents.DayNight.NoActionBar"/>
//lazy로 선언한 이유는 onCreate함수보다 먼저 선언했기 때문
//여기서는 apply를 이용해 lazy변수에 바로 min, max로 초기화함.
private val numberPicker1: NumberPicker by lazy {
findViewById<NumberPicker>(R.id.numberPicker1)
.apply {
minValue = 0
maxValue = 9
}
}
//password를 저장하는 방법은 로컬DB나 파일에 직접 저장
//여기서는 SharedPreferences를 이용
//이 파일을 다른 앱에서 사용못하게 MODE_PRIVATE으로 선언
val passwordPreferences = getSharedPreferences("password", Context.MODE_PRIVATE)
경고문 만들기
AlertDialog.Builder(this)
.setTitle("실패!!")
.setMessage("비밀번호가 잘못되었습니다.")
.setPositiveButton("확인") { dialog, which -> }//원래는 dialog, which지만 불필요한 코드생략으로 인해 _, _ 표현
.create()
.show()
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는 비동기적으로 바로 처리