[Android/Kotlin] Anko 확장 활용-1

SoyoungLee·2021년 6월 8일
0

안드로이드/코틀린

목록 보기
3/68
post-thumbnail

💌 Anko 라이브러리

  • Anko 라이브러리는 젯브레인즈에서 공식 지원하고 있는 라이브러리로 안드로이드 개발을 좀더 쉽고 빠르게 개발하도록 도와주는 라이브러리
  • DSL (Domain-Specific Language) 제공
  • 기존 xml 사용하지 않고 코드에서 레이아웃 쉽게 구성 가능

웹사이트 : 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"
}

📌 Anko Commons 활용하기

💜 다이얼로그 표시하기

// 기존 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])
    ([]) 생략가능

💜 로그 기록 AnkoLogger

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)

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글