{"id":1059,"date":"2024-11-14T09:07:49","date_gmt":"2024-11-14T09:07:49","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=1059"},"modified":"2024-11-14T09:33:55","modified_gmt":"2024-11-14T09:33:55","slug":"kotlin-drawerlayout-1-main-screen-part","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2024\/11\/14\/kotlin-drawerlayout-1-main-screen-part\/","title":{"rendered":"[Kotlin]Drawerlayout &#8211; 1.\uba54\uc778\ud654\uba74 \ubd80\ubd84(Main Screen Part)"},"content":{"rendered":"\n<p>\ub354 \uce5c\uc808\ud55c \ucf54\ud2c0\ub9b0 \uc571\ud504\ub85c\uadf8\ub798\ubc0d \ucc45\uc5d0 \uc788\ub294 \ucf54\ub4dc \uc785\ub2c8\ub2e4.<br>This is code from the Friendlier Kotlin App Programming book<\/p>\n\n\n\n<p>\uc774 \ucf54\ub4dc\ub294 \ubdf0\ubc14\uc778\ub529\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<br>This code does not use view binding.<\/p>\n\n\n\n<p>Test : compileSdk = 35 targetSdk = 35<\/p>\n\n\n\n<p><strong>1.Directory  &amp; Files<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"692\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/11\/directory.png\" alt=\"\" class=\"wp-image-1060\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/11\/directory.png 396w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/11\/directory-172x300.png 172w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/figure>\n\n\n\n<p><strong>2.MainActivity.kt<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.example.drawerex\n\nimport android.os.Bundle\nimport android.widget.Toast\nimport androidx.activity.OnBackPressedCallback\nimport androidx.activity.enableEdgeToEdge\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.appcompat.widget.Toolbar\nimport androidx.core.view.GravityCompat\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.WindowInsetsCompat\nimport androidx.drawerlayout.widget.DrawerLayout\nimport androidx.fragment.app.Fragment\nimport com.google.android.material.navigation.NavigationView\n\nclass MainActivity : AppCompatActivity() {\n\n    enum class FragmentItem{\n        ITEM1,ITEM2,ITEM3\n    }\n\n    lateinit var fragment:Fragment\n    lateinit var toolbar:Toolbar\n    lateinit var drawerLayout:DrawerLayout\n    lateinit var navigationView: NavigationView\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        enableEdgeToEdge()\n        setContentView(R.layout.activity_main)\n        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.drawerLayout)) { v, insets -&gt;\n            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())\n            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)\n            insets\n        }\n\n\n        onBackPressedDispatcher.addCallback(this, onBackPressedCallback)\n\n        toolbar = findViewById(R.id.toolbar)\n        drawerLayout = findViewById(R.id.drawerLayout)\n        navigationView = findViewById(R.id.navigationView)\n\n        \/\/toolbar excute\n        toolbar.title=\"\uccab\ubc88\uc9f8 \ud654\uba74First Screen\"\n        setSupportActionBar(toolbar)\n\n        \/\/DrawerLayout excute\n        val toggle = ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close)\n        drawerLayout.addDrawerListener(toggle)\n        toggle.syncState()\n\n        \/\/ Fragment1 excute\n        fragment = Fragment1()\n        supportFragmentManager.beginTransaction().replace(R.id.container,fragment).commit()\n\n        navigationView.setNavigationItemSelectedListener {\n            when(it.itemId){\n                R.id.item1 -&gt; {\n                    showToast(\"\uccab\ubc88\uc9f8 \uc120\ud0dd\ub428First Screen Selected\")\n                    onFragmentSelected(FragmentItem.ITEM1,null)\n                }\n                R.id.item2 -&gt; {\n                    showToast(\"\ub450\ubc88\uc9f8 \uc120\ud0dd\ub428Second Screen Selected\")\n                    onFragmentSelected(FragmentItem.ITEM2,null)\n                }\n                R.id.item3 -&gt; {\n                    showToast(\"\uc138\ubc88\uc9f8 \uc120\ud0dd\ub428Third Screen Selected\")\n                    onFragmentSelected(FragmentItem.ITEM3,null)\n                }\n            }\n            drawerLayout.closeDrawer(GravityCompat.START)\n            return@setNavigationItemSelectedListener true\n        }\n    }\n\n\n\n\/*\n        \/\/ deprecated\n        override fun onBackPressed() {\n            if(layoutDrawer.isDrawerOpen(GravityCompat.START)) {\n                layoutDrawer.closeDrawers()\n            }\n            else {\n                super.onBackPressed()\n            }\n*\/\n\n    fun onFragmentSelected(item:FragmentItem,bundle: Bundle?){\n        var fragment:Fragment\n\n        when(item){\n            FragmentItem.ITEM1 -&gt;{\n                toolbar.title=\"\uccab \ubc88\uc9f8 \ud654\uba74First Screen\"\n                fragment = Fragment1()\n            }\n            FragmentItem.ITEM2 -&gt;{\n                toolbar.title=\"\ub450 \ubc88\uca30 \ud654\uba74Second Screen\"\n                fragment = Fragment2()\n            }\n            FragmentItem.ITEM3 -&gt;{\n                toolbar.title=\"\uc138 \ubc88\uca30 \ud654\uba74Third Screen\"\n                fragment = Fragment3()\n            }\n        }\n        supportFragmentManager.beginTransaction().replace(R.id.container,fragment).commit()\n    }\n\n    private val onBackPressedCallback = object : OnBackPressedCallback(true) {\n        override fun handleOnBackPressed() {\n            if(drawerLayout.isDrawerOpen(GravityCompat.START)){\n                drawerLayout.closeDrawers()\n            }\n            else {\n                finish()\n            }\n        }\n    }\n\n    fun showToast(message:String?){\n        Toast.makeText(this,message,Toast.LENGTH_LONG).show()\n    }\n\n}<\/code><\/pre>\n\n\n\n<p><strong>3.activity_main.xml<\/strong><\/p>\n\n\n\n<p>-xml design<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"411\" height=\"718\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/11\/active_main_xml-1.png\" alt=\"\" class=\"wp-image-1062\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/11\/active_main_xml-1.png 411w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2024\/11\/active_main_xml-1-172x300.png 172w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/figure>\n\n\n\n<p>-xml code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n\n    android:id=\"@+id\/drawerLayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    tools:openDrawer=\"start\"&gt;\n    &lt;androidx.coordinatorlayout.widget.CoordinatorLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"&gt;\n\n        &lt;com.google.android.material.appbar.AppBarLayout\n            android:id=\"@+id\/appBarLayout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"&gt;\n\n            &lt;androidx.appcompat.widget.Toolbar\n                android:id=\"@+id\/toolbar\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                android:layout_marginTop=\"30dp\"\n                android:background=\"?attr\/colorPrimary\"\n                app:popupTheme=\"@style\/AppTheme.PopupOverlay\" \/&gt;\n\n        &lt;\/com.google.android.material.appbar.AppBarLayout&gt;\n\n        &lt;FrameLayout\n            android:id=\"@+id\/container\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            app:layout_behavior=\"@string\/appbar_scrolling_view_behavior\"&gt;&lt;\/FrameLayout&gt;\n\n    &lt;\/androidx.coordinatorlayout.widget.CoordinatorLayout&gt;\n\n    &lt;com.google.android.material.navigation.NavigationView\n        android:id=\"@+id\/navigationView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\"\n        app:headerLayout=\"@layout\/nav_header\"\n        app:menu=\"@menu\/nav_menu\" \/&gt;\n&lt;\/androidx.drawerlayout.widget.DrawerLayout&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ub354 \uce5c\uc808\ud55c \ucf54\ud2c0\ub9b0 \uc571\ud504\ub85c\uadf8\ub798\ubc0d \ucc45\uc5d0 \uc788\ub294 \ucf54\ub4dc \uc785\ub2c8\ub2e4.This is code from the Friendlier Kotlin App Programming book \uc774 \ucf54\ub4dc\ub294 \ubdf0\ubc14\uc778\ub529\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.This code does not use view binding. Test : compileSdk = 35 targetSdk = 35 1.Directory &amp; Files 2.MainActivity.kt 3.activity_main.xml -xml design -xml code<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,1],"tags":[],"class_list":["post-1059","post","type-post","status-publish","format-standard","hentry","category-kotlin","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=1059"}],"version-history":[{"count":5,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1059\/revisions"}],"predecessor-version":[{"id":1086,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/1059\/revisions\/1086"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=1059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=1059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=1059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}