๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ๊ต์ก์๋ฃ๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํ ํฌ์คํธ์ ๋๋ค.
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"
๋ถํ์ํ ๊ณต์ง๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ฌ์ฉ์์๊ฒ ๋ ์ข์ต๋๋ค.