웹사이트 : https://github.com/Kotlin/anko
💗 4가지 Anko 라이브러리 💗
- Anko Commons : 인텐트, 다이얼로그, 로그 등을 편리하게 사용하는 라이브러리
- Anko Layouts : 안드로이드 레이아웃을 코드로 쉽게 작성하는 라이브러리
- Anko SQLite : SQLite를 쉽게 사용하는 라이브러리
- Anko Coroutines : 코루틴을 쉽게 사용하는 라이브러리
모듈 단위의 build.gradle 파일에 라이브러리 의존성 추가
dependencies {
implementation "org.jetbrains.anko:anko:$anko_version"
}
프로젝트 단위의 build.gradle 파일에 변수 지정
buildscript {
ext.anko_version = '0.10.8'
}
dependencies {
// Anko Commons
implementation "org.jetbrains.anko:anko-commons:$anko_version"
// Anko Layouts
// sdk15, sdk19, sdk21, sdk23 are also available
implementation "org.jetbrains.anko:anko-sdk25:$anko_version"
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
// Coroutine listeners for Anko Layouts
implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"
// Anko SQLite
implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
}
dependencies {
// Appcompat-v7 (only Anko Commons)
implementation "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version"
// Appcompat-v7 (Anko Layouts)
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
implementation "org.jetbrains.anko:anko-coroutines:$anko_version"
// CardView-v7
implementation "org.jetbrains.anko:anko-cardview-v7:$anko_version"
// Design
implementation "org.jetbrains.anko:anko-design:$anko_version"
implementation "org.jetbrains.anko:anko-design-coroutines:$anko_version"
// GridLayout-v7
implementation "org.jetbrains.anko:anko-gridlayout-v7:$anko_version"
// Percent
implementation "org.jetbrains.anko:anko-percent:$anko_version"
// RecyclerView-v7
implementation "org.jetbrains.anko:anko-recyclerview-v7:$anko_version"
implementation "org.jetbrains.anko:anko-recyclerview-v7-coroutines:$anko_version"
// Support-v4 (only Anko Commons)
implementation "org.jetbrains.anko:anko-support-v4-commons:$anko_version"
// Support-v4 (Anko Layouts)
implementation "org.jetbrains.anko:anko-support-v4:$anko_version"
// ConstraintLayout
implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
}
// 기존 Toast 코드
btn_toast.setOnClickListener{
Toast.makeText(
this, // Toast를 보일 문맥
"안녕하세요!" // 보여줄 텍스트
Toast.LENGTH_SHORT // 길이
).show()
}
// Anko의 toast 코드
btn_toast.setOnClickListener{
toast("안녕하세요!") // 짧은 길이의 Toast
toast(R.string.message) // 리소스의 메시지 직접 사용하기
longToast("메시지가 긴 길이를 가지고 있을 때 사용")
}
// Anko의 스낵바 코드
btn_snackbar.setOnClickListener{
// it.snackbar("스낵바입니다") // view.snackbar와 같이 호출
// it.snackbar(R.string.message)
// it.longToast("메시지가 긴 길이를 가지고 있을 때 사용")
//it.snackbar("실행할까요?","실행"){
// toast("실행합니다!")
// }
Snackbar.make(it,"스낵바입니다",Snackbar.LENGTH_SHORT).show()
}
// Anko의 프로그래스바
btn_progress.setOnClickListener {
val dialog = horizontalProgressBar()
dialog.progress = 50
}
btn_sub.setOnClickListener {
// 액티비티 전환 시 항상 인텐트 객체 생성 후 메소드 호출
val intent = Intent(this, SubActivity::class.java)
intent.putExtra("id",5)
// 특정 플래그를 flags에 지정
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)
// Anko 라이브러리를 적용한 코틀린의 액티비티 전환코드 -> 간단
startActivity(intentFor<SubActivity>("id" to 5).singleTop())
// 플래그나 추가 데이터가 없을 때
startActivity<SubActivity>("id" to 5)
startActivity<SubActivity>()
}
Anko가 제공하는 인텐트 래퍼
- 전화걸기 : makeCall(number)
- 문자 메시지 보내기 : sendSMS(number, [text])
- 웹 탐색하기 : browse(url)'
- 텍스트 공유하기 : share(text, [subject])
- 이메일 보내기 : email(email, [subject], [text])
([]) 생략가능
class MainActivity : AppCompatActivity() , AnkoLogger { // 인터페이스 추가선언
info("onCreate()" + "info message") // 일반 정보
// info { "onCreate()" + "info message" } // lazy 표현(람다식)
debug(5) // .toString()이 호출되 문자열로 바뀜
warn(null) // null로 출력
}
AnkoLogger 함수
verbose() : 모든 로그 메시지 출력
debug() : 디버그
info() : 정보
warn() : 경고
error() : 오류
wtf() : 치명적 오류(What a terrible failure)