
๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ๊ต์ก์๋ฃ๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํ ํฌ์คํธ์ ๋๋ค.
API level์ Android SDK์ ํ๋ ์์ํฌ API ๋ฒ์ ์ ์๋ณํฉ๋๋ค.
MyApplication
โโโ app
โ โโโ libs
โ โโโ src
โ โโโ androidTest
โ โโโ main
โ โ โโโ java
โ โ โโโ res
โ โ โโโ AndroidManifest.xml
โ โโโ test
โโโ build.gradle
โโโ gradlew
XML์ ์ด์ฉํ์ฌ ๋ ์ด์์์ ํธ์งํ ์๋ ์์ต๋๋ค.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
android:layout_width="wrap_content"android:layout_width="match_parent"android:layout_width="48dp"
FrameLayout์ ์ผ๋ฐ์ ์ผ๋ก ๋จ์ผ ์์ ๋ทฐ๋ฅผ ๋ณด์ ํฉ๋๋ค.
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello World!"/>
</FrameLayout>
child views๋ฅผ ์ ๋ ฌํฉ๋๋ค.android:orientation์ ๊ฐ๋ก ๋๋ ์ธ๋ก๋ก ์ค์ <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView ... />
<TextView ... />
<Button ... />
</LinearLayout>

์ฝ๋์์ ์ฌ์ฉํ๋ static ์ฝํ ์ธ ๋๋ ์ถ๊ฐ ํ์ผ์ ๋๋ค.
์์ res ํด๋ ์๋์ ์ ์ ํ res ๋๋ ํ ๋ฆฌ์ ํฌํจํ์ฌ ์ฑ์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
main
โโโ java
โโโ res
โโโ drawable
โโโ layout
โโโ mipmap
โโโ values
underscores ํจ๊ป ๋ชจ๋ lowercase๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค๊ฐ๋ณ view์๋ ๋ฆฌ์์ค ID๊ฐ ์์ ์ ์์ต๋๋ค.
android:id ์์ฑ์ XML์ view์ ์ถ๊ฐํฉ๋๋ค. @+id/name ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
<TextView
android:id="@+id/helloTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
์ด์ ์ฑ ๋ด์์ TextView๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค. R.id.helloTextView
Activity๋ ์ฌ์ฉ์๊ฐ ํ๋์ ์ฃผ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ์๋จ์
๋๋ค.Activity๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

์์คํ
์ด Activity๋ฅผ ์์ฑํ ๋ ํธ์ถ๋ฉ๋๋ค.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

์ฑ์ด ๋ฒํผ ํญ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์
๋ ฅ์ ์๋ตํ๋๋ก Activity๋ฅผ ์์ ํฉ๋๋ค.

MainActivity.kt ์์์
view ๊ณ์ธต๊ตฌ์กฐ์์ View์ ๋ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
val resultTextView: TextView = findViewById(R.id.textView)
view instance์์ ์์ฑ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
resultTextView.text = "Goodbye!"

XML์ ์ ์ธ๋ Button์ id๋ฅผ ์ฐธ์กฐํด ๊ฐ์ ธ์จ ๋ค click event๋ฅผ ๋ฑ๋กํ ์์์
๋๋ค.
class MainActivity : AppCompatActivity(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
...
val button: Button = findViewById(R.id.button)
button.setOnClickListener(this)
}
override fun onClick(v: View?) {
TODO("not implemented")
}
}
ํจ์๋ฅผ ์ธํฐํ์ด์ค ๊ตฌํ์ผ๋ก ๋ณํํฉ๋๋ค.
val runnable = Runnable { println("Hi there") }
// ์์ ๋ฐฉ์๊ณผ ๊ฐ์ ํํ์
๋๋ค.
val runnable = (object: Runnable {
override fun run() {
println("Hi there")
}
})
Click listener๋ฅผ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ์ ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
val button: Button = findViewById(R.id.button)
button.setOnClickListener({ view -> /* do something*/ })
}
}
class Student(val id: String) {
lateinit var records: HashSet<Any>
init {
// retrieve records given an id
}
}
class MainActivity : AppCompatActivity() {
lateinit var result: TextView
override fun onCreate(savedInstanceState: Bundle?) {
...
result = findViewById(R.id.result_text_view)
}
}
Lateinit์ ์ฌ์ฉํด TextView๋ฅผ Notnullํ๊ฒ ์ ์ธํ ์ ์์ต๋๋ค.
์ฑ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ธํ๋ผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
Android ํ์ํ ์์ฑ์ ์ ์ํฉ๋๋ค.
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.sample"
minSdkVersion 19
targetSdkVersion 30
}
}
App์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ธํฉ๋๋ค.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
...
}
ํด๋น ์ ์ฅ์์ ์ฐ๊ฒฐํฉ๋๋ค.
repositories {
google()
mavenCentral()
}
contentDescription ์์ฑ์ ์ฌ์ฉํ๋ฉด screen reader๋ก ์ฝ์ด์ง๋๋ค.
<ImageView
...
android:contentDescription="@string/stop_sign" />
TextView์ text์ ๊ฒฝ์ฐ ์ด๋ฏธ accessibility services์ ์ ๊ณต๋์์ผ๋ฏ๋ก ์ถ๊ฐ label์ด ํ์ ์์ต๋๋ค.
์์ ํ ์ฅ์์ฉ ๊ทธ๋ํฝ ์์์ ๋ํด์๋ ๋ค์์ ์ค์ ํ ์ ์์ต๋๋ค.
android:importantForAccessibility="no"
๋ถํ์ํ ๊ณต์ง๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ฌ์ฉ์์๊ฒ ๋ ์ข์ต๋๋ค.