안드로이드

[안드로이드] DrawerLayout, NavigationView 사용하기

wangkisa 2016. 12. 27. 10:53


자세한 NavigationView 사용 예제는 생략합니다.


NavigationView 를 사용해서 toolbar 에 네이게이션 아이콘을 설정해도 나타나지 않아서 생각보다 쉽게 되지 않았습니다.



 그 중에서 ActionBarDrawerToggle을 사용했을때 아이콘 설정 및 클릭했을 때 동작을 소개하려고 합니다.


1. 레이아웃 작성


<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.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/drawer_layout"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:fitsSystemWindows="true"

    android:orientation="vertical"

    tools:context="com.~~MainActivity">


    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical">


        <android.support.design.widget.AppBarLayout

            android:id="@+id/app_bar"

            android:layout_width="match_parent"

            android:layout_height="?attr/actionBarSize"

            android:fitsSystemWindows="true"

            android:theme="@style/AppTheme.AppBarOverlay">



            <android.support.v7.widget.Toolbar

                android:id="@+id/toolbar"

                android:layout_width="match_parent"

                android:layout_height="?attr/actionBarSize"

                android:background="@color/white"

                app:navigationIcon="@drawable/icon_menu"

                />


        </android.support.design.widget.AppBarLayout>


        <include layout="@layout/content_main" />

    </LinearLayout>


    <android.support.design.widget.NavigationView

        android:id="@+id/nav_view"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:layout_gravity="start"

        android:fitsSystemWindows="true"

        app:headerLayout="@layout/nav_header_main"

        app:menu="@menu/activity_main_drawer" />


</android.support.v4.widget.DrawerLayout>



2. 소스 구현 


안된 구현 :

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

getSupportActionBar().setHomeButtonEnabled(true);

toolbar.setNavigationIcon(R.drawable.icon_menu);


이렇게만 하고 온갖 옵션 찾아보고 아무리 설정해도 안되어서


stackoverflow 에서 찾아본 결과 


 아래 bold 된 것처럼 toggle 객체를 setDrawerIndicatorEnabled 를 false 시킨 이후에 

toolbar 에 아이콘 설정을 해줘야 되는 것을 알수 있었습니다.

 근데, 이렇게만 하면 아이콘을 클릭해도 안되서 다시 toolbar에 클릭 이벤트를 적용해줘야 동작합니다.


private void initNavigationDrawer(Toolbar toolbar) {

        final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

        final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(

                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);


        toggle.setDrawerIndicatorEnabled(false);


        toolbar.setNavigationIcon(R.drawable.icon_menu);

        toolbar.setTitle("");

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                drawer.openDrawer(Gravity.LEFT);

            }

        });


        drawer.setDrawerListener(toggle);

        toggle.syncState();


        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

        navigationView.setNavigationItemSelectedListener(this);


        navigationView.setItemIconTintList(null);

    }


3. 결과