[Android/Kotlin]Drawer Layout 구현2

hyihyi·2023년 6월 23일
0

1. 메뉴 만들기 drawer_menu.xml

res -> New -> Android Resource File
File name은 drawer_menu

아이콘 3개를 nav_camera, nav_photo, nav_slideShow 이름으로 추가해줘야 한다.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_camera"
            android:icon="@drawable/ic_camera"
            android:title="Camera"/>
        <item
            android:id="@+id/nav_photo"
            android:icon="@drawable/ic_photo"
            android:title="Photo"/>
        <item
            android:id="@+id/nav_slideShow"
            android:icon="@drawable/ic_slideshow"
            android:title="SlideShow"/>
    </group>
</menu>

2. 메인 화면 구성 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/toolbar_layout" />
    </LinearLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:fitsSystemWindows="true"
        app:menu="@menu/drawer_menu" />

</androidx.drawerlayout.widget.DrawerLayout>

3. 메인 코드 구성 MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

//        val toolbar: Toolbar = findViewById(R.id.toolbar)
        val navigationView: NavigationView = findViewById(R.id.navigationView)
        val drawerLayout: DrawerLayout = findViewById(R.id.drawerLayout)

        //액션바에 toolbar 셋팅
        setSupportActionBar(findViewById(R.id.toolbar))

        //네비게이션뷰 아이템 선택 이벤트
        navigationView.setNavigationItemSelectedListener(
//            네비게이션 안의 메뉴 선택 시 실행
            object: NavigationView.OnNavigationItemSelectedListener{
                override fun onNavigationItemSelected(item: MenuItem): Boolean {

                    when(item.itemId){

                        R.id.nav_camera -> {

//                            해당 메뉴 선택 표시
                            item.isChecked = true
                            displayMessage("selected camera")
//                            DrawerLayout 닫기
                            drawerLayout.closeDrawers()
                            return true
                        }

                        R.id.nav_photo -> {
                            item.isChecked = true
                            displayMessage("selected photo")
                            drawerLayout.closeDrawers()
                            return true
                        }

                        R.id.nav_slideShow -> {
                            item.isChecked = true
                            displayMessage("selected slideShow")
                            drawerLayout.closeDrawers()
                            return true
                        }

                        else -> {
                            return true
                        }
                    }//when
                }//onNavigationItemSelected
            }//NavigationView.OnNavigationItemSelectedListener
        )//setNavigationItemSelectedListener


    }//onCreate

    //메시지 알림
    private fun displayMessage(message: String){
        Toast.makeText(applicationContext, message, Toast.LENGTH_SHORT).show()
    }

}//MainActivity
profile
내가 이해하기 쉽게 쓰는 블로그

0개의 댓글