Kotlin, Anko(앤코) 라이브러리
Anko 라이브러리
코틀린 개발한 JetBrains에서 만든 라이브러리(Library), 기본 코드작성을 편리하게 도와주는 기능
4가지의 라이브러리로 구성
Anko Commons : 인텐트, 다이얼로그, 로그 등을 편리하게 사용하는 라이브러리
Anko Layouts : 안드로이드 레이아f9f2f4웃을 코드로 쉽게 작성하는 라이브러리
Anko SQLite : SQLite를 쉽게 사용하는 라이브러리
Anko Coroutines : 코루틴을 쉽게 사용하는 라이브러리
Anko 라이브러리의 설정 방법 등 사용 방법 참고
Gradle '의존성 추가'
build.gradle(Module: app) 파일에서 dependencies (의존성 추가)
: implementation "org.jetbrains.anko:anko:$anko_version" // 그대로 입력
dependencies "의존성 추가"
: implementation "org.jetbrains.anko:anko:$anko_version"
$anko_version은 build.gradle(Project)파일의 enko_version 값을 사용한다는 의미
dependencies {
implementation "org.jetbrains.anko:anko:$anko_version"
}
build.gradle(Project: 프로젝트명)
: buildscript 내부에 ext.anko_version = '0.10.5' 선언
buildscript 내부 ext.anko_version = '0.10.5' 선언
: dependencies(의존성 추가)에 적었던 $anko_version에 들어갈 값 의미
Sync Now로 변경 적용
Intent '인텐트' 사용방법
Intent(인텐트)로 많은 기능을 사용하는데 Anko로 사용하는 방법을 예시로 표현
대표적인 기능인 Activity 호출(띄우기)
일반적인 Activity호출 (Java / Kotlin)
// JAVA
Intent it = new Intent(Context, ActivityName.class);
startActivity(it);
// Kotlin
val it = Intent(Context, ActivityName::class.java)
startActivity(it)
Anko라이브러리 Activity 호출 (Kotlin)
: startActivity<호출할 Activitiy명>()
// Anko 라이브러리
startActivity<ActivityName>()
Activity 호출 + 데이터(Data) 추가
일반적인 Intent Data 추가 (Java / Kotlin)
// JAVA
Intent it = new Intent(Context, ActivityName.class);
it.putExtra("key", value);
it.putExtra("key2", value2);
startActivity(it);
// Kotlin
val it = Intent(Context, ActivityName::class.java)
it.putExtra("key", value)
it.putExtra("ke2", value2)
startActivity(it)
Anko라이브러리 Intent Data 추가 (Kotlin)
: startActivity<호출할 Activitiy명>()
// Anko 라이브러리
startActivity<ActivityName>( // Activity 호출 명령과 동시에 선언
"key1" to value1,
"key2" to value2
)
Intent 내부 Data 꺼내기(가져오기)
일반적인 Intent Data 꺼내기 (Java / Kotlin)
// JAVA
Intent it = getIntent();
String name = it.getStringExtra("key");
int age = it.getIntExtra("key");
Anko라이브러리 Intent Data 꺼내기 (Kotlin)
: 예제 코드를 보면 의문점이 생기게 되는데,
"클래스에서 getIntent() 처럼 Intent객체를 받아오질 않았는데 intent는 어떻게 사용하지?"
-> Java에서는 사용자가 직접 Activity클래스의 getIntent() 메소드로 Intent객체를 가져와 참조하는 방식으로 사용
Kotlin에서는 Intent 객체를 받는걸 알아서 처리, 하지만 인스턴스명은 'intent'로 고정되어 사용해야 한다
// Kotlin
var email = intent.getStringExtra("key") // key에 대한 값 가져오기
var name = intent.getStringExtra("key", "null") // 해당 key가 없으면 뒤에 입력한 값으로 반환
var age = intent.getIntExtra("key", 0) // 해당 Key가 없으면 0을 반환
Toast '토스트' 사용방법
Anko 라이브러리를 사용해 Toast(토스트) 메시지를 간단하게 구현 가능
일반적인 사용방법(Java/Kotlin)
// "Button 클릭" 토스트 메시지 출력
Toast.makeText(Context, "Button 클릭", Toast.LENGTH_SHORT).show()
Anko라이브러리 사용방법(Kotlin)
toast("Button 클릭") // 사용방법1, Toast.LENGTH_SHORT 속성
longToast("Button 클릭") // 사용방법2, Toast.LENGTH_LONG 속성
Log(로그) 사용방법
로그(Log) 메시지 사용방법
일반적인 사용방법(Java/Kotlin)
// JAVA
Log.d("TAG", "LOG 출력할 내용"); // Debug 로그
Log.i("TAG", "LOG 출력할 내용"); // Info 로그
Log.v("TAG", "LOG 출력할 내용"); // Verbose 로그
Log.w("TAG", "LOG 출력할 내용"); // Warm 로그
Log.e("TAG", "LOG 출력할 내용"); // Error 로그
Anko라이브러리 사용방법(Kotlin)
// AnkoLogger (로거) 인스턴스를 생성
val log = AnkoLogger(this::class.java) // TAG들어갈 Activity클래스
// 로거객체의 메서드로 로그 사용
log.debug("Anko LOG TEST - DEBUG") // Debug
log.info("Anko LOG TEST - Info") // Info
log.verbose("Anko LOG TEST - Verbose") // Verbose
log.warn("Anko LOG TEST - Warm") // Wraning
log.error("Anko LOG TEST - Error") // Error
log.wtf("Anko LOG TEST - Wtf") // WTF
다이얼로그 'AlertDialog'
: alert 생성자 사용
// Title과 Message를 생성자로 초기화, Click이벤트도 람다식으로 인자를 넘겨줌
alert(title = "테스트 Dialog", message = "TEST Message"){
positiveButton("확인") { toast("확인 클릭") }
negativeButton("취소") { toast("취소 클릭") }
}.show()
리스트 다이얼로그 'List Dialog'
: selector 생성자 사용 (show() 사용 X)
매개변수로 Title, Item리스트, 고차함수(람다식)을 넘겨줌
// Title과 Message를 생성자로 초기화, Click이벤트도 람다식으로 인자를 넘겨줌
val list = listOf("김루피", "최상디", "박조로", "쵸파")
selector(title="Text List Dialog", items = list) {
// 고차함수(onClick) _는 DialogInterface인자인데 사용안하므로 _처리
_, index -> toast("${list[index]} 선택")
}
selector생성자 메서드 들여보기
// 매개변수(인자) 3개, title / items / 고차함수(onClick)
fun Context.selector(
title: CharSequence? = null,
items: List<CharSequence>,
onClick: (DialogInterface, Int) -> Unit
) {
// 생성자 호출 후 with 메서드로 자동으로 show()해주므로 사용자가 show() 호출X
with(AndroidAlertBuilder(this)) {
if (title != null) {
this.title = title
}
items(items, onClick) // items()함수
show()
}
}
프로그래스바 'ProgressBar Dialog'
: 2종류로 구분되어 사용 (막대형식 / 원형식)
막대형식
progressDialog(title="Test Progress", message = "msg").apply { // apply 스코프함수
progress = 20 // 초기 값
max = 100 // 최대 값
}.show()
원형식
val progress = indeterminateProgressDialog(message = "msg")
progress.show()
progress.cancel()
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
indeterminateProgressDialog(message = "msg").show()