ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] DrawerLayout, NavigationView 사용하기
    안드로이드 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. 결과



Designed by Tistory.