SunFlower ์ฑ์ Android Jetpack์ ์ ์ ์ฉ์ํค๋ฉฐ ์ ๋ฐ์ดํธ ์ค์ธ android ๊ณต์ ์ํ ์ฑ์ด๋ค.
Jetpack์ ๊ณต๋ถํ๊ธฐ์ ์ข์ ์ฑ์ธ ๊ฒ ๊ฐ์ ํด๋ก ์ฝ๋ฉํด๋ณด๊ธฐ๋ก ํ๋ค!
- MainActivity
- activity_main.xml
- Navigation๊ณผ ์ฐ๊ฒฐ๋ Fragment ํ ๊ฐ๊ฐ ๋ฐฐ์น๋์ด ์์
- onCreate()
- data binding์ ์ฌ์ฉํ์ฌ activity_main.xml ํ์ผ์ binding ํจ(ํ์ฑ ๋ทฐ๋ก ์ค์ )
- activity_main.xml
1๏ธโฃ Build ํ์ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Dependency ์์ฑํ ๋ root build.gradle ํ์ผ์ ๋ฒ์ ์ ๋ฆฌํ๊ณ , app build.gradle ํ์ผ์์ ์ฌ์ฉํ๊ธฐ!
// 1. root build.gradle ํ์ผ
buildscript {
// Define versions in a single place
ext {
// Sdk and tools
compileSdkVersion = 30
minSdkVersion = 21
targetSdkVersion = 30
// App dependencies
appCompatVersion = '1.1.0'
constraintLayoutVersion = '2.0.0-beta3'
...
}
repositories {
google()
jcenter()
}
...
}
// 2. app build.gradle ํ์ผ ์์
...
dependencies {
implementation "androidx.appcompat:appcompat:$rootProject.appCompatVersion"
implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion"
...
}
2๏ธโฃ ๋ค์ด๋ฐ ์คํฌ!
-
file ์์ฑ์ ์ด๋ฆ ์ง๊ธฐ.
-
xml ํ์ผ์ activity_main.xml, fragment_detail ์ฒ๋ผ activity, fragment๋ฅผ ์์ผ๋ก ๋ฐฐ์นํ๋ค.
-
ํด๋์ค ํ์ผ์ MainActivity.kt, DetailFragment ์ฒ๋ผ ํด๋น xml ํ์ผ ์ด๋ฆ์ ์์๋ฅผ ๋ฐ๊พธ์ด ํ์ค์นผ๋ฒ์ผ๋ก ์์ฑํ๋ค.
-
-
xml ํ์ผ์์ ์ฌ์ฉํ๋ id ๋ snake ํ๊ธฐ๋ฒ์ผ๋ก ์์ฑํ์.
-
fragment์ id๋
<fragment android:id="@+id/plant_detail_fragment" ... >
plant_detail_fragment ์ฒ๋ผ fragment๋ฅผ ๋งจ ๋ง์ง๋ง์ ๋ถ์ธ๋ค.
-
layout์ id๋
<androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/coordinator_layout" android:layout_width="match_parent" android:layout_height="match_parent"> ... </androidx.coordinatorlayout.widget.CoordinatorLayout>
coordinator_layout ๊ณผ ๊ฐ์ด ๋ ์ด์์์ ๊ณ ์ ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค. ๋ง์ฝ AppBarLayout์ ๋ฐฐ์นํ๋ค๋ฉด id๋ app_bar_layout ์ผ๋ก ์์ฑํ๋ผ๋ ๊ฒ!
-
-
ํด๋๋ช ์ ๋ชจ๋ ์๋ฌธ์๋ก ์์ฑํ๊ณ , ํด๋ ์์ ์ ์ฅํ ํ์ผ๋ค์ด ์ฌ๋ฌ๊ฐ๋ฉด ํด๋๋ช ๊ฐ์ฅ ๋ง์ง๋ง์ s(๋ณต์ํ)๋ฅผ ๋ถ์ด์.
- Adapter์ ๊ด๋ จ๋ ํด๋์ค๋ค์ด ์ ์ฅ๋ ํด๋๋ adapters ๋ผ๊ณ ์ด๋ฆ ์ง๋๋ค.
3๏ธโฃ width, height ๊ฐ ์์ฑ ์คํฌ!
-
์์ ๋ทฐ๋ฅผ ๊ฐ์ง๋ ๋ถ๋ชจ ๋ทฐ์ width๋ height ๊ฐ์ wrap_content๋ก ๋ง์ถฐ์ฃผ์. (์ฆ, ๋ถ๋ชจ ๋ทฐ์์ width๋ height ๋์ด๋ฅผ ์ง์ dp ๊ฐ์ผ๋ก ๋ฃ์ง ๋ง์๋ ๊ฒ!)
<com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.google.android.material.appbar.MaterialToolbar android:id="@+id/topAppBar" android:layout_width="match_parent" android:layout_height="200dp" </com.google.android.material.appbar.AppBarLayout>
์ ์ฝ๋์์ ๋ถ๋ชจ ๋ทฐ์ธ AppBarLayout์ width๋ match_parent๋ก ๋ง์ท์ง๋ง(์์ ๋ทฐ์ ํฌ๊ธฐ์ ์ํฅ์ ๋ฐ์ง ์์ ๋ทฐ์ด๊ธฐ ๋๋ฌธ) height๋ wrap_content๋ก ๋ง์ถ์๋ค.
์์ ๋ทฐ์ธ MaterialToolBar์ height๊ฐ ์ธ์ ๋ ์ง ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ๋ทฐ์ ๋์ด์ ๋ถ๋ชจ ๋ทฐ๊ฐ ๋์ ์ผ๋ก ๋ง์ถฐ์ง๋๋ก ํ ๊ฒ!
4๏ธโฃ ์ฃผ์ ์์ฑ ์คํฌ
-
์์ด๋ก ์์ฑํ ๋๋ ๋์ฌ(์ฒซ ์ํ๋ฒณ ๋๋ฌธ์)๋ก ์์ํ๊ฒ๋ ์์ฑํ๋ค.
์ ) // Initialize view objects
์ ) // Set the icon and text for each tab
Official SunFlower App ์ Contributor๊ฐ ๋์๋ค!