Udacity ์์ Developing Android Apps with Kotlin ์ด๋ผ๋ ๊ฐ์๋ฅผ ๋ฃ๊ณ lesson ๋ณ๋ก ์ค์ํ๋ค๊ณ ์๊ฐํ ๋ถ๋ถ์ ํ๊ธฐํ ๋ด์ฉ์ด๋ค.
์์ด ๊ฐ์๋ฅผ ๋ฃ๊ณ ํ๊ธฐํ ๋ด์ฉ์ด๋ค ๋ณด๋ ๋ฒ์ญ์ด๋ ํด์์ด ์๋ชป๋ ๋ถ๋ถ์ด ์์ ์ ์๋ค. ๋ ์ผ๋ถ๋ ์์ด ๋จ์ด๋ ๋ฌธ์ฅ์ ๊ทธ๋๋ก ์ ์ด๋์๋ค.
์ ํํ ๋ด์ฉ์ ๊ฐ์๋ฅผ ์ง์ ์ฐธ๊ณ ํ๋ ๊ฒ์ ๊ถํ๋ค.
3. Quiz: Navigation Terms
4. Fragments
Android introduced fragments in Android 3.0 API level 11, primarily to support more dynamic and flexible UI designs on large screens such as tablets. The activity operates as a frame that contains the UI fragments and can provide UI elements that surround the fragment. UI fragment’s generally operate like a view within the activity’s layout, but like in activity, you must create a subclass of fragment to use it. This gives you a layout along with the convenient place to put UI logic, the foundation of a reusable UI component. With fragments, You can pretty much treat activities as the operating system’s entry point to the app. Since most of your UI ends up being implemented in the fragments, but the OS can only open activities. Within an activity, You tell Android which layout to use by calling setContentView in onCreate. The activity then inflates the layout and places it correctly within the activity’s layout hierarchy. With fragments, you manually inflate and return the inflated layout within the onCreate view method, which is independent of onCreate. Another difference, since activities inherit from the context class, but fragments do not, you'll need to use the context property within a fragment to have access to app data typically associated with the context, such as string and image resources.
OK, now we are ready to talk about navigation. You can navigate between different activities and between fragments and activity. As you navigate through activities in Android, the previous activities from within the app as well as from previous apps are arranged in a stack that we call the back stack. This back stack is ordered based upon the order in which each activity is opened. An application that has a title screen as the first screen followed by a trivia game activity would have the trivia game activity at the top of the stack, hitting the system back key would pop the trivia game activity off the stack and return to the title screen activity and hitting it again would exit the app, finishing the activity and return us to the previous app, probably the launcher. Fragments can have a similar backstack, except that entire stack is contained within the activity. All of this is controlled by a class called the fragment manager. When a fragment is instantiated by the fragment manager, the fragment transaction can optionally be added to the fragment back stack. If our example trivia app was written using fragments and we run the game screen, the fragment backstack would contain a transaction to return us to the title screen fragment. Hitting the back key would execute this transaction, effectively popping the game screen fragment off of the stack and replacing it with a title screen fragment. Hitting it again would pass the back operation through to the activity backstack, finishing the activity and exiting the app. Ultimately, you can design your navigation with either an activity containing a series of fragments, a series of activities, or a combination of both techniques. For this class we're focusing on the single activity multiple fragment model which allows you to visualize your entire apps navigation within a single graph the best way to learn about fragments is to implement them which we're going to do in the project for this lesson.
5. Quiz: Fragment Basics
- Fragment์์๋ activity์ฒ๋ผ onCreate ๋ฉ์๋ ๋ด์์ view๋ฅผ inflate ์ํค๋ ๊ฒ์ด ์๋๋ผ onCreateView ๋ฉ์๋ ๋ด์์ inflate ์ํจ๋ค.
- Context property๋ฅผ ์ฌ์ฉํ์ฌ string์ด๋ image resource ๊ฐ์ ์ฑ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ค.
- UI Fragment๋ Activity layout ๋ด์ ํฌํจ๋๊ณ ์๋ฆฌ๋ฅผ ์ฐจ์งํ๋ค.
7. Exercise: Creating and Adding a Fragment (์ถ๊ฐ ํ์)
Activity์์๋ DataBindingUtil.setContentView๋ฅผ ์ฌ์ฉํด์ ๋ ์ด์์์ผ๋ก๋ถํฐ binding ํด๋์ค๋ฅผ ๊ฐ์ ธ์ด.
Fragment์์ DataBindingUtil.inflate๋ฅผ onCreateView ๋ด์์ ํธ์ถ.
10. Navigation Components
์์น 1๏ธโฃ: There's Always a Starting Place
์ฑ์ ๊ณ ์ ๋ ์ถ๋ฐ์ ์ด ์๋ค. ์ฌ์ฉ์๊ฐ ๋ฐ์ฒ์์ ์ฑ์ ์ด์์ ๋, ์ฌ์ฉ์๊ฐ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฐ์ฒ๋ก ๋์๊ฐ๋ ํ๋ฉด.
์์น 2๏ธโฃ: You Can Always Go Back
์ฑ์ ๋ค๋น๊ฒ์ด์
state๋ LIFO๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค๋ ๊ฒ์ธ๋ฐ ์ด๊ฒ์ด ์์์ ์ธ๊ธ๋ backstack. Stack์ ๋ฐ๋ฅ์๋ start destination, stack์ ์ต์๋จ์๋ current destination. ๋ค๋น๊ฒ์ด์
์คํ์ ๋ณ๊ฒฝํ๋ ๋์์ ์คํ์ ์ต์๋จ์์๋ง ์ด๋ฃจ์ด์ ธ์ผํ๋ค. 1) ์๋ก์ด destination์ ์๋จ์ push, 2) ์๋จ์ destination์ ์คํ์์ pop off.
์์น 3๏ธโฃ: Up goes Back(Mostly)
Action bar์ up button๊ณผ System์ back button์ ์ฑ ๋ด์์ ์ด๋ํ ๋ ๋์ผํ๊ฒ ๋์ํ๋ค. System์ back button์ ์ฑ์ ์ธ๋ถ ๋ค๋ฅธ ์ฑ์ด๋ ๋ณดํต ๋ฐ์ฒ๋ก ๋๊ฐ๋ค. ์ฑ์ ์์ํ๋ฉด์์๋ action bar์ up button์ด ๋ณด์ฌ์ ธ์๋ ์๋๋ค.
์ด๋ฌํ ์์น๋ค์ ์ ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ์ผ๊ด๋๊ณ ์์ ๊ฐ๋ฅํ ๊ฒฝํ์ ์ ๊ณตํด์ผํ๋ค.
12. Exercise: Back Stack Manipulation
Navigation Controller๋ back stack์ ์ฒ๋ฆฌํด์ค๋ค. ์ฐ๋ฆฌ๊ฐ destination์ผ๋ก ์ด๋ํ ๋๋ง๋ค navigation controller๋ ๊ฐ destination์ back stack์ ์๋์ผ๋ก ์ถ๊ฐํ๋ค.
์ด๊ฒ์ด ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ์ํฉ์ ์๋ฅผ ๋ค์ด TitleFragment(๊ฒ์ ์์ ๋ฒํผ์ ๋๋ฅผ ์ ์๋ ํ๋ฉด), GameFragment(๊ฒ์์ ์งํํ ์ ์๋ ํ๋ฉด), GameOverFragment(๊ฒ์ ์ข ๋ฃ๋ฅผ ์๋ฆฌ๋ ํ๋ฉด) ์ด ์์๋ก ์งํํด ์๋ค๊ณ ํ์ ๋ back key๋ฅผ ๋๋ฅด๋ฉด ๋ค์ GameFragment๋ก ๋์๊ฐ๋ค๋ ๊ฒ์ด๋ค. ๊ฒ์์ด ์ด๋ฏธ ์ข ๋ฃ๋ ์ํ์์ ๋ค์ GameFragment๋ก ๋์๊ฐ๊ธฐ๋ฅผ ์ฌ์ฉ์๋ ์ํ์ง ์์ ๊ฒ์ด๋ค.
๊ทธ๋ผ ํด๊ฒฐ๋ฐฉ์์?
Navigation action์ ๋ค์ destination์ผ๋ก ์ด๋ํ๋ฉด์ back stack์ ์กฐ์ํ ์ ์๊ฒ ํด์ค๋ค. ๋ฐ๋ผ์ GameOverFragment๋ก ์ด๋ํ ๋ GameOverFragment๊ฐ back stack์ push ๋๊ธฐ ์ ์ GameFragment๋ฅผ back stack์์ pop offํ๋ฉด ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์๋๋ก์ด๋ ์คํ๋์ค ์๋ํฐ ํ๋ฉด์ Pop Behaviour ํญ๋ชฉ์์ handleํ ์ ์๋ค. popTo GameFragment, Inclusive์ ์ฒดํฌํ๋ฉด GameFragment๋ฅผ ํฌํจํ์ฌ(Inclusive) backstack์์ pop off ํด๋ฒ๋ฆฐ๋ค.
ํ๋์ ์ผ์ด์ค๋ฅผ ๋ ๊ณ ๋ คํด๋ณด์.
GameOverFragment์์ ๊ฒ์ ๋ค์ ์์ ๋ฒํผ์ ๋๋ฌ ๋ค์ Playํ๊ณ ์ถ๋ค๋ฉด?
๊ฒ์์ด ๋ค์ ์์๋ ๋ GameOverFragment๋ back stack์์ ์ ๊ฑฐํด์ผํ ๊ฒ์ด๋ค. popTo์์ TitleFragment๋ฅผ ์ ํํ๊ณ Inclusive๋ ์ฒดํฌํ์ง ์์ผ๋ฉด gameFragment๊ฐ ์ ์ผ ์๋จ์ ์์นํ๊ฒ ๋๋ค.
์ด back stack handling์ด ์ ์ฉ๋ action๋ค์ Kotlin ํ์ผ์์ onClickListener์ ์ฐ๊ฒฐํด์ฃผ์ด์ผ ์ ๋๋ก ๋์ํ๋ค.
13. Quiz: Back Stack Manipulation
14. Exercise: Adding Support for the Up Button
Action Bar์ up button ์ถ๊ฐํ๊ธฐ.
Navigation Controller๋ NavigatoinUI๋ผ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๊ณ ์๋ค. ์ฌ๋ฌ ๊ธฐ๋ฅ ์ค์์ action bar์ ํตํฉ๋์ด up button์ ๋ํ ์ฌ๋ฐ๋ฅธ ๋์์ ๊ตฌํํ๋ค.
NavigationUI๋ naviagtion controller์ access ํด์ผํ๋ค. activity์์ navigation controller๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ NavHostFragment id๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ findNavController ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
15. Android Navigation - Up vs Back
- Up ๋ฒํผ, Back ๋ฒํผ ๋ชจ๋ ์ฑ ๋ด์์ ์ด๋ํ๋ค.
- Back ๋ฒํผ์ ์ฑ์ ์ธ๋ถ, ๋ค๋ฅธ ์ฑ์ผ๋ก ์ด๋์ํจ๋ค.
16. Google Interview: Ian Lake
https://www.youtube.com/watch?v=Enpgi-J4wWA
17. Exercise: Adding a Menu
๋ฉ๋ด๋ menu XML resource์์ ์์ฑํ๋ค.
๋ฉ๋ด์ ์์ดํ
ID์ ๋ชฉ์ ์ง Fragment์ ID๋ ๋์ผํ๊ฒ ํ์ฌ ์ด๋๋ก ์ด๋ํ๊ธฐ๋ฅผ ์ํ๋์ง ๋ค๋น๊ฒ์ด์
์์ ์๋ ค์ค๋ค.
ID๊ฐ ์๋ก ์ผ์นํ์ง ์์ผ๋ฉด ์ด๋ํ์ง ์๋๋ค.
๋ฉ๋ด๋ฅผ ํ๋ฉด์์ ๋ณด์ฌ์ฃผ๋ ค๋ฉด?
MainActivity์ ๋๋ฉด ์ฑ์ ๋ชจ๋ ํ๋ฉด์์ ๋ณด์ฌ์ง๋ค.
๋จผ์ ์๋๋ก์ด๋์๊ฒ ๋ณด์ฌ์ง๊ธธ ์ํ๋ Activity / Fragment์ ์ฐ๊ฒฐ๋ ๋ฉ๋ด๊ฐ ์์์ onCreate / onCreateView์์ setHasOptionsMenu(true)๋ฅผ ์ถ๊ฐํ์ฌ ์๋ ค์ค๋ค.
Menu๋ onCreateOptionsMenu๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ์์ฑํ๋๋ฐ layout์ฒ๋ผ ๋ฉ๋ด๋ฅผ inflateํ๋ค.
Menu Item์ด select๋๋ฉด onOptionsItemSelected ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค. ํด๋น ๋ฉ๋ด์ ํด๋นํ๋ Fragment๋ก ์ด๋ํ๋ ค๋ฉด NavigationUIํจ์์ ๋์์ ๋ฐ์ ์ ์๋ค. ๋ง์ผ NavigationUI๊ฐ ์ ํ ํญ๋ชฉ์ ๋ํด handleํ์ง ์์ผ๋ฉด super.onOptionsItemSelected๋ฅผ ํธ์ถํ์ฌ ์ฑ์ด navigation ์์ด menu item์ ์ง์ handleํ ์ ์๊ฒ ํ๋ค.
์ฌ๊ธฐ์ ์ ์ํ ๋งํ ์ ์ menu๋ ์ด๋ํ๊ธฐ ์ํ action์ ๋ณ๋๋ก ์์ฑํ์ง ์์๋ค๋ ๊ฒ์ธ๋ฐ ๋ฉ๋ด๋ ๋ณดํต ํ ๊ฐ ์ด์์ destination์ผ๋ก ๊ฐ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ๊ทธ๋์ ๊ฐ ๋ฉ๋ด์ ๋ํ action์ ๋ช ์ํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์ ์๋ค. ๋ฐ๋ผ์ menu์์๋ action์ ์ฌ์ฉํ๊ธฐ ๋ณด๋จ destination์ผ๋ก ๋ฐ๋ก ์ด๋ํ๋ค.
18. Quiz: Matching Menu Attributes
19. Exercise: Adding Safe Arguments
Fragments ๊ฐ์ arguments ์ ๋ฌํ๊ธฐ
Fragments๋ Android bundle ํํ ๋ด์ arguments๋ฅผ ํฌํจํ๋ค. Key-Value์์ ์ ์ฅํ๋๋ฐ unique ํค๋ฅผ ์ฌ์ฉํ์ฌ associated value๋ฅผ fetch ํ๋ค. bundle์๋ ์ ํ๋ ํ์
(๊ธฐ๋ณธ primitive type์ด๋ array ๊ฐ์ ๊ฐ)์ ๋ํด ๊ฐ์ผ๋ก ์ ์ฅํ ์ ์๋ค.
FragmentA โก๏ธ Bundle โก๏ธ FragmentB
val argBundle = Bundle() // FragmentA ํด๋์ค์์ argument bundle ์ธ์คํด์ค ์์ฑ
argBundle.putString(NAME_KEY_STRING, "content")
argBundle.puString(SERIAL_KEY_INT, 42)
val fragment = FramgmentB()
fragment.arguments = argBundle // FragmentB ์ธ์คํด์ค์ arguments๋ฅผ property๋ก ์ค์
ํ์ง๋ง ์ด ๋ฐฉ์์ ๋ฒ๊ทธ๊ฐ ์๊ธธ ์ ์๋ค. ํ์
์ด ๋ง๋์ง ๋ณด์ฅ์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ์ ๋ด๋ ๋ณ์์ arguments์ ํ์
์ด ์ผ์นํ์ง ์์ ์ ์๋ค.
๊ทธ๋์ Navigation์ Safe Args๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Gradle plugin์ผ๋ก ์์ชฝ Fragment์์ argument๊ฐ ์ผ์นํ๋ ์ฝ๋ ์์ฑ์ ๋ณด์ฅํ๋๋ก ๋์์ฃผ๊ณ argument passing๋ ๋จ์ํ ์์ผ์ค๋ค.
1๏ธโฃ build.gradle(project) ํ์ผ์ Safe Args Gradle plugin dependency๋ฅผ ์ถ๊ฐ
2๏ธโฃ build.gradle(App) ํ์ผ์ ์๋จ์ apply plugin: 'androidx.navigation.safeargs' ์ถ๊ฐ
Safe Arguments์ Nav direction์ ์๊ด๊ด๊ณ? action ID๋ฅผ nav direction ํด๋์ค์ action ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด arguments๋ฅผ ๋๊ฒจ์ฃผ๊ธฐ ์ํ ์ค๋น๋ฅผ ํ ์ ์์. (์ถ๊ฐ ํ์)
Arguments๋ navigation.xml ์๋ํฐ์์ ์ถ๊ฐํ ์ ์๋ค.
๋๊ฒจ๋ฐ๊ธฐ ์ํ๋ Fragment์์ arguments์ name๊ณผ type์ ์ ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ์์์ ๋ณ๊ฒฝํด์ค nav direction์์ arguements๋ฅผ ๋๊ฒจ์ค ์ ์๊ณ ๋๊ฒจ์ฃผ์ง ์์ผ๋ฉด ์ปดํ์ผ๋์ง ์๋๋ค.
20. Why do we have Safe Arguments?
21. Intents and Sharing
์๋๋ก์ด๋๋ ์ฑ ๋ด์ activity ๊ฐ์๋ ์ด๋ํ๋ ๊ฒ์ ํ์ฉํ๋ค. ๋ ๋ค๋ฅธ ์ฑ์์ ์ ๊ณตํ๋ activity๋ก๋ ์ด๋ํ ์ ์๋ค. (์นด๋ฉ๋ผ, ์ฐ๋ฝ์ฒ ๋ฑ)
Intent๋ ์ฑ์ intention์ ๋ํ๋ธ๋ค. ์ฑ์ด ๋ฌด์ธ๊ฐ ํ๊ธฐ ์ํ๋ activity. Intents๋ explicitํ ์๋ implicitํ ์๋ ์๋ค.
Explicit intent is used to launch an activity using the name of the target activity class, and they are typically only used to launch other activities within your application, navigation component๊ฐ ์ด๊ฒ์ ๋์ ํด์ค๋ค. navigation graph ๋ด์์ ๋ค๋ฅธ activity๋ก ์ด๋ํ๋๋ก ๋์์ค.
Implicit intent๋ ์ํ๋ ๋์์ ๋ํ ์ถ์์ ์ธ description์ ์ ๊ณตํ๋ค. ๋๊ฐ ๋ค๋ฅธ ์ฑ์ ์ํด expose๋ activity๋ค์ launchํ๋๋ฐ ์ฌ์ฉ๋๋ค.
Explicit & Implicit Intent์ ๋ํ ๋น์
- Explicit intent๋ ํน์ local ํธ์์ ์ ๋ํ ์ค๋ช
.
- Implicit intent๋ ๋ฐ๊ฒฝ 5๋ง์ผ ์ด๋ด์ ์ ๊ธฐ๋ ์๋ฐฐ์ถ๋ฅผ ํ๋ ๊ฐ๊ฒ๋ค. ๋ด ๋ฐ๊ฒฝ 5๋ง์ผ ๋ด์ ์ ๊ธฐ๋ ์๋ฐฐ์ถ ํ๋ ๊ฐ๊ฒ๊ฐ ์์ ์๋ ์๋ ๊ฒ์ฒ๋ผ ์์คํ
์๋ implicit intent๋ฅผ handle ํ ์ ์๋ ์ฑ์ด ์์ ์๋ ์๋ค.
์ฌ๋ฌ ์ฑ์ด ๋์ผํ implicit intent๋ฅผ handle ํ ์ ์์ ๋ ์๋๋ก์ด๋๋ compatible app ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ๊ณ ๋ฅผ ์ ์๊ฒ ํ๋ค. Implicit intent๊ฐ ์ค์ํ ์ด์ ๋ ๋ค๋ฅธ ์ฑ์์ ์๋ฌด๊ฒ๋ ์ฑ์ ๋ํด ์๋ ๊ฒ ์์ด ๋ฌด์ธ๊ฐ๋ฅผ ์์ฒญํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ผ ์ฌ์ฉ์๊ฐ text๋ฅผ ๊ณต์ ํ๊ธธ ์ํ๋ค๋ฉด ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ ์ง ์์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ง๋ ์ค์ํ์ง ์๋ค. ์ด ์์ฒญํ๋ ๊ฒ์ handleํ ์ ์๋ activity๋ฅผ ๊ฐ์ง ์ฑ์ด๋ฉด ๋๋ค.
๊ฐ implicit intent๋ action์ด ๋ฐ๋์ ํ์ํ๋ค. ์ฌ๊ธฐ์์ action์ navigation action๊ณผ๋ ์์ ํ ๋ค๋ฅด๋ค. ์ฌ๊ธฐ์๋ the type of thing that the app wants to have done on its behalf. Common actions๋ intent class์ ์ ์๋์ด ์๋ค.
Implicit intent๋ operation์ ๋ฌ์ฌํ๊ธฐ ์ํ ์นดํ
๊ณ ๋ฆฌ์ ๋ฐ์ดํฐ ํ์
์ด ์๋ค. ์นดํ
๊ณ ๋ฆฌ๋ ํญ์ ์ฌ์ฉ๋์ง ์๊ณ action์ ์ ๋งคํจ์ ์์ ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ๋ฐ์ดํฐ ํ์
์ text, jpeg์ ๊ฐ์ด ๋ฐ์ดํฐ ํ์
์ ํฌํจํ ์ ์๋ค. ์ด๊ฒ์ accept ๊ฐ๋ฅํ ๋ฐ์ดํฐ ํ์
์ ๋ฐ๋ผ ์ฑ์ด ์ ํ๋๋๋กํ๋ค.
๋ชจ๋ activity๋ launch๋๋ ค๋ฉด AndroidManifest.xml์ ๋ฑ๋ก๋์ด ์์ด์ผ ํ๋ค.
Explicity launch๋๋ activity์ ๊ฒฝ์ฐ <activity> ํ๊ทธ๋ก๋ง ์ ์ธ๋๋ค.
Implicitly launch๋๋ activity์ ๊ฒฝ์ฐ <intent-filter> ํ๊ทธ๊ฐ ํ์ํ๋ค.
์ด intent-filter๋ activity๋ฅผ ํน์ action, category, type์ implicit intent์ ์๋ตํ ์ ์์์ ๋
ธ์ถ์ํค๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
22. Quiz: Explicit vs Implicit Intents
24. Exercise: Adding the Navigation Drawer
Navigation drawer: ์คํฌ๋ฆฐ์ ๊ฒฝ๊ณ๋ฉด์์ ์ฌ๋ผ์ด๋ ๋์ด ๋์ค๋ panel. ๋ณดํต ํค๋์ ๋ฉ๋ด๊ฐ ์๋ค. ์ข์ธก ์คํฌ๋ฆฐ ๊ฒฝ๊ณ์์ ์ฌ๋ผ์ด๋ํ๊ฑฐ๋, action bar์ ํ๋ฒ๊ฑฐ ๋ฉ๋ด๋ฅผ ๋๋ฅด๋ฉด ๋์ค๋ ๋ฉ๋ด์ด๋ค. ๋๊ฐ 5๊ฐ๋ ๊ทธ ์ด์์ primary destination์ ๊ฐ์ง๊ณ ์๋ ๋ณต์กํ ์ฑ์์ ์ฌ์ฉํ๋ค. primary destination์ด๋ navigation hierarchy์์ ๋์ผ ์์น๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ์ธ๋ฐ ๊ฐ์ navigation parent, start destination์ ๊ฐ๋๋ค.
Navigation drawer์์ destination ๊ฐ์ ์ด๋ํ ๋ it pops the back stack back to the start destinatoin, and then pushes the destinaton to be navigated to as the second element on the stack. (๋ด ํด์์ ๋ฐ๋ฅด๋ฉด navigaton drawer์ destination๋ค์ ๊ฐ์ depth๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ navigatoin drawer์ A ๋ฉ๋ด์ ๋ค์ด๊ฐ๋ค๊ฐ B ๋ฉ๋ด์ ๋ค์ด๊ฐ๋ฉด back stack A ์์ B๊ฐ ์์ด๋ ๊ฒ์ด ์๋ A๊ฐ pop out ๋๊ณ B๊ฐ ๋ค์ด๊ฐ. )
Navigation drawer๋ material library์ ์ผ๋ถ์ด๋ค.
26. Quiz: How to Navigate
27. Exercise: Using Navigation Listeners
Navigation Listener๋ ์ฐ๋ฆฌ๊ฐ navigate ํ ๋ ๋ง๋ค ํธ์ถ๋๋ single method interface์ด๋ค. Naviagate ํ๋ ๋์ ๋ฌด์ธ๊ฐ๋ฅผ ํ๊ฑฐ๋, ๋ง๋ ์ผ์ ํ ์ ์๋ค.
28. Animation with Navigation
Navigation์์ animation์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ์ฑ๋ค ์ค ๋์ ๋๊ฒ ํด์ฃผ๊ธฐ๋ ํ์ง๋ง ์ฌ์ฉ์๊ฐ ์ฑ์ ํ๋ฆ์ ์ด์ ํ๋๋ฐ์๋ ๋์์ ์ค๋ค. ์ด๋ฐ transition์ XML animation resources์ ์ํด์ control ๋๋ค.
res > anim > xml ํ์ผ ์์ฑํ์ฌ ๋ง๋ค ์ ์๋๋ฐ <set></set> ๋ด๋ถ์ ๋ช
๋ น์ด๋ค์ ํตํด ๊ฐ์ด ๋์ํ๊ฑฐ๋ ์์๋๋ก ๋์ํ๊ฒ ํ ์ ์๋ค. ๋ set ์์ set์ ๋ ์๋ ์๋ค.
Alpha๋ ์ด๋ค ๊ฒ์ด ์ผ๋ง๋ ํฌ๋ช ํ๊ฐ๋ฅผ ๋ํ๋ด๋๋ฐ 0%๋ ๋ณด์ด์ง ์์, 100%๋ ๋ถํฌ๋ช ํ ๊ฒ์ ๋ํ๋ธ๋ค.
X offset์ ๋ํ์ฌ -100%๋ ์คํฌ๋ฆฐ ์ข์ธก, 100%๋ ์คํฌ๋ฆฐ ์ฐ์ธก.
Y offset์ ๋ํ์ฌ -100%๋ ์คํฌ๋ฆฐ ์๋จ, 100%๋ ์คํฌ๋ฆฐ ํ๋จ.
29. Quiz: Animation Attributes
'Android & Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Lesson 5: App Architecture(UI Layer) (0) | 2022.02.22 |
---|---|
๊ณต๋ถ ์ฃผ์ (0) | 2022.02.19 |
Lesson 4: Activity & Fragment Lifecycle (0) | 2022.02.11 |
Lesson 2: Layouts (0) | 2022.02.06 |
Lesson 1: Build your First App (0) | 2022.02.06 |