요술고양이의 Digital Life

Anko는 JetBrain에서 만든 라이브러리로서, 안드로이드 레이아웃을 XML을 통하지 않고 쉽게 만들 수 있게 도와주는 DSL(Domain-Specific Language) 입니다.

간단한 코드 만으로 xml을 대신하여 레이아웃을 구성할 수 있게 도움을 줍니다.


일단 라이브러리 관련 사이트는 아래와 같습니다.

https://github.com/Kotlin/anko


안드로이드 스튜디오에서 적용은 아래와 같이 bilud.gradle에 추가해주면 됩니다.


dependencies {
    compile 'org.jetbrains.anko:anko-sdk15:0.9' // sdk19, sdk21, sdk23 are also available
    compile 'org.jetbrains.anko:anko-support-v4:0.9' // In case you need support-v4 bindings
    compile 'org.jetbrains.anko:anko-appcompat-v7:0.9' // For appcompat-v7 bindings
}


기본적인 사용 방법은 해당 사이트를 참고하면 아래와 같습니다.


class MyActivity : AppCompatActivity() {


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)


verticalLayout {

padding = dip(30)

 editText {

 hint = "Name"

 textSize = 24f

 }


 editText {

 hint = "Password"

 textSize = 24f

 }


 button("Login") {

 textSize = 26f

 }

}

}


액티비티를 실앵해보면 아래와 같이 바로 모양이 뜹니다.



근데 문제는 동적으로 가변적인 수의 컴포넌트를 배치하고자 할 때 였습니다.


다수의 동일한 스타일의 컴포넌트들을 일괄적으로 배치하거나 특정한 상황이나 결과에 따라 동적으로 컴포넌트를 배치하고 싶은데

기본 페이지에서는 원하는 방법을 찾지 못했습니다.


그런데 해답은 생각보다 가까운데 있었습니다.


verticalLayout 중간에 components 관련 구문뿐만 아니라 일반 구문을 사용해도 에러나 문제가 없고

loop문 중간에 선언하는 것 만으로 배치가 가능했습니다.


그래서 아래와 같이 for나 forEach 등으로 원하는 수 만큼 동적으로 컴포넌트들을 배치할 수 있습니다.


class MyActivity: AppCompatActivity() {

val examples = arrayListOf("Example 1", "Example 2", "Example 3")

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

verticalLayout {
padding = dip(30)

editText {
hint = "Name"
textSize = 24f
}

editText {
hint = "Password"
textSize = 24f
}

button("Login") {
textSize = 26f
}

examples.forEach { example ->
textView {
text = example
textSize = 26f
}
}

}
}

}






Comment +0