차근차근/안드로이드 스튜디오

네비게이션 드로어 만들기

예쁜꽃이피었으면 2016. 8. 10. 17:59


네이게이션 드로어  Navigation Drawer



https://www.youtube.com/watch?v=sDz6RtZsbrI

http://desarrollador-android.com/material-design/desarrollo-material-design/pautas-desarrollo/navigation-drawer-android-design-support-library-desarrollo/

http://desarrollador-android.com/material-design/diseno-material-design/pautas/navigation-drawer/



여기 소스

https://github.com/basigarcia/NavigationDrawerTutorial

https://github.com/basigarcia/NavigationDrawerTutorial/commit/549c1dc6f70c3bf39f3cad73ae884949419c1aaf

-> 연결된 동영상 https://www.youtube.com/watch?v=5b6AGSh4dVE (이거 따라함)




Design_네비게이션 드로어.vol1.egg

Design_네비게이션 드로어.vol2.egg

Design_네비게이션 드로어.vol3.egg

Design_네비게이션 드로어.vol4.egg

Design_네비게이션 드로어.vol5.egg

Design_네비게이션 드로어.vol6.egg

Design_네비게이션 드로어.vol7.egg

Design_네비게이션 드로어.vol8.egg

Design_네비게이션 드로어.vol9.egg


음..깃허브 사용해야 겠다..ㅜ



 android.support.v4.app.FragmentTransaction fragmentTransaction =

                getSupportFragmentManager().beginTransaction();


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

        setSupportActionBar(toolbar);


에서 에러가 난다.


public class MainActivity extends Activity

에서

public class MainActivity extends AppCompatActivity


 Activity가 더 큰 범위아니었나... 무튼 에러 사라짐..


 ----------------------------------------------------------

  java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.


  app_bar_main.xml에서


      tools:context="design.test.uk.design.MainActivity"> 이 부분을 제대로 적었더니 사라짐



[ build.gradle ]

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "design.test.uk.design"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    compile 'com.github.clans:fab:1.6.2'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.android.support:support-v4:23.4.0'
}


[ MainActivity.java ]


package design.test.uk.design;


import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.support.design.widget.NavigationView;

import android.support.v4.view.GravityCompat;

import android.support.v4.widget.DrawerLayout;

import android.support.v7.app.ActionBarDrawerToggle;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.Toolbar;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.TextView;


import com.github.clans.fab.FloatingActionButton;

import com.github.clans.fab.FloatingActionMenu;


public class MainActivity extends AppCompatActivity implements View.OnClickListener

                , NavigationView.OnNavigationItemSelectedListener {


    FloatingActionMenu materialDesignFAM;

    FloatingActionButton floatingActionButton1,floatingActionButton2,floatingActionButton3,floatingActionButton4,

            floatingActionButton5,floatingActionButton6;


    NavigationView navigationView = null;

    Toolbar toolbar = null;



    @SuppressWarnings("StatementWithEmptyBody")

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        //네비게이션 드로어

        MainFragment fragment = new MainFragment();

        android.support.v4.app.FragmentTransaction fragmentTransaction =

                getSupportFragmentManager().beginTransaction();

        fragmentTransaction.replace(R.id.fragment_container , fragment);

        fragmentTransaction.commit();


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

        setSupportActionBar(toolbar);


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


        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(

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

        drawer.setDrawerListener(toggle);

        toggle.syncState();


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


        View headerView = navigationView.getHeaderView(0);

        TextView emailText = (TextView) headerView.findViewById(R.id.email);

        emailText.setText("Testmail@email.com");


        navigationView.setNavigationItemSelectedListener(this);




    }


    @Override

    public boolean onNavigationItemSelected(MenuItem item) {

        int id = item.getItemId();


        if(id == R.id.nav_camara){

            MainFragment fragment = new MainFragment();

            android.support.v4.app.FragmentTransaction fragmentTransaction =

                    getSupportFragmentManager().beginTransaction();

            fragmentTransaction.replace(R.id.fragment_container,fragment);

            fragmentTransaction.commit();

        }else if(id == R.id.nav_gallery){

            GalleryFragment fragment = new GalleryFragment();

            android.support.v4.app.FragmentTransaction fragmentTransaction =

                    getSupportFragmentManager().beginTransaction();

            fragmentTransaction.replace(R.id.fragment_container,fragment);

            fragmentTransaction.commit();

        }else if(id == R.id.nav_slideshow){


        }else if(id == R.id.nav_manage){


        }else if(id == R.id.nav_share){


        }else if(id == R.id.nav_send){


        }


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

        drawer.closeDrawer(GravityCompat.START);

        return true;

    }




    //뒤로가기 버튼에 반응한다

    //확인메시지가 필요한 경우

    //http://seungngil.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-onBackPressed-%EC%A2%85%EB%A3%8C-%ED%99%95%EC%9D%B8-%EB%A9%94%EC%84%B8%EC%A7%80-%EC%98%88%EC%A0%9C-%EB%94%B0%EB%9D%BC%ED%95%98%EA%B8%B0

    @Override

    public void onBackPressed(){

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

        if(drawer.isDrawerOpen(GravityCompat.START)){

            drawer.closeDrawer(GravityCompat.START);

        }else{

            super.onBackPressed();

        }

    }



    //옵션 메뉴를 초기화 / 옵션 메뉴를 맨 처음 띄울 때 호출  / 메인화면 우측 상단 메뉴

    //설명

    //http://blog.naver.com/PostView.nhn?blogId=netrance&logNo=110144987408

    @Override

    public boolean onCreateOptionsMenu(Menu menu){

        getMenuInflater().inflate(R.menu.main,menu);

        return true;

    }


    //사용자가 선택한 메뉴 항목 / 메인화면 우측 상단 메뉴

    @Override

    public boolean onOptionsItemSelected(MenuItem item){

        int id = item.getItemId();


        if(id == R.id.action_settings){

            return true;

        }

        return super.onOptionsItemSelected(item);

    }



}




[ GalleryFragment.java ]


package design.test.uk.design;


import android.content.Context;

import android.net.Uri;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;




public class GalleryFragment extends Fragment {


    public GalleryFragment() {

        // Required empty public constructor

    }



    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

                             Bundle savedInstanceState) {

        // Inflate the layout for this fragment

        return inflater.inflate(R.layout.fragment_gallery, container, false);

    }


}


[ MainFragment.java ]


package design.test.uk.design;


import android.content.Context;

import android.net.Uri;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;



public class MainFragment extends Fragment {



    public MainFragment() {

        // Required empty public constructor

    }



    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,

                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_main, container, false);


        final Button mainButton = (Button) rootView.findViewById(R.id.main_button);

        mainButton.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {


                mainButton.setBackgroundColor(getContext().getResources().getColor(R.color.colorAccent));

            }

        });

        // Inflate the layout for this fragment

        return rootView;

    }


}




[ activity_main.xml ]


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

<android.support.v4.widget.DrawerLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:fab="http://schemas.android.com/apk/res-auto"

    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" tools:openDrawer="start">


    <include layout="@layout/app_bar_main" android:layout_width="match_parent"

        android:layout_height="match_parent" />


    <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>




[ app_bar_main.xml ]


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

<android.support.design.widget.CoordinatorLayout

    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:layout_width="match_parent"

    android:layout_height="match_parent"

    android:fitsSystemWindows="true"

    tools:context="design.test.uk.design.MainActivity">

<!--  tools:context="navigationdrawer.test.uk.navigationdrawer.MainActivity"-->

    <android.support.design.widget.AppBarLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        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="?attr/colorPrimary"

            app:popupTheme="@style/AppTheme.PopupOverlay" />


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



    <FrameLayout

        android:id="@+id/fragment_container"

        android:layout_width="match_parent"

        android:layout_height="match_parent">



    </FrameLayout>


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




[ fragment_gallery.xml ]


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="design.test.uk.design.GalleryFragment">


    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="GALLERY"

        android:padding="8dp"

        android:textColor="#fff"

        android:background="@color/colorPrimary"

        android:textSize="28sp"

        android:id="@+id/main_button"

        android:layout_centerVertical="true"

        android:layout_centerHorizontal="true" />

</RelativeLayout>




[ fragment_main.xml ]

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="design.test.uk.design.MainFragment">


    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="MAIN"

        android:padding="8dp"

        android:textColor="#fff"

        android:background="@color/colorPrimary"

        android:textSize="28sp"

        android:id="@+id/main_button"

        android:layout_centerVertical="true"

        android:layout_centerHorizontal="true" />


</RelativeLayout>





[ nav_header_main.xml ]


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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="190dp"

    android:background="@drawable/background_material_red"

    android:orientation="vertical"

    >


    <de.hdodenhof.circleimageview.CircleImageView

        xmlns:app="http://schemas.android.com/apk/res-auto"

        android:id="@+id/profile_image"

        android:layout_width="70dp"

        android:layout_height="70dp"

        android:src="@drawable/profile"

        app:border_color="#FF000000"

        android:layout_marginLeft="24dp"

        android:layout_centerVertical="true"

        android:layout_alignParentLeft="true"

        android:layout_alignParentStart="true"

        android:layout_marginStart="24dp" />


    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Comp. Sci. Tutorials"

        android:textSize="14sp"

        android:textColor="#FFF"

        android:textStyle="bold"

        android:gravity="left"

        android:paddingBottom="4dp"

        android:id="@+id/username"

        android:layout_above="@+id/email"

        android:layout_alignLeft="@+id/profile_image"

        android:layout_alignStart="@+id/profile_image" />


    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="user@host.com"

        android:id="@+id/email"

        android:gravity="left"

        android:layout_marginBottom="8dp"

        android:textSize="14sp"

        android:textColor="#fff"

        android:layout_alignParentBottom="true"

        android:layout_alignLeft="@+id/username"

        android:layout_alignStart="@+id/username" />


</RelativeLayout>




[ activity_main_drawer.xml ]


<?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_camara" android:icon="@android:drawable/ic_menu_camera"

            android:title="Import" />

        <item android:id="@+id/nav_gallery" android:icon="@android:drawable/ic_menu_gallery"

            android:title="Gallery" />

        <item android:id="@+id/nav_slideshow" android:icon="@android:drawable/ic_menu_slideshow"

            android:title="Slideshow" />

        <item android:id="@+id/nav_manage" android:icon="@android:drawable/ic_menu_manage"

            android:title="Tools" />

    </group>


    <item android:title="Communicate">

        <menu>

            <item android:id="@+id/nav_share" android:icon="@android:drawable/ic_menu_share"

                android:title="Share" />

            <item android:id="@+id/nav_send" android:icon="@android:drawable/ic_menu_send"

                android:title="Send" />

        </menu>

    </item>


</menu>



[ main.xml ]


<menu 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" tools:context=".MainActivity">


    <item android:id="@+id/action_settings" android:title="@string/action_settings"

        android:orderInCategory="100" app:showAsAction="never" />


    <item android:id="@+id/action_search" android:title="Search"

        android:orderInCategory="1" android:icon="@drawable/ic_search"

        app:showAsAction="ifRoom" />


</menu>




[ colors.xml ]


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

<resources>

    <color name="colorPrimary">#F44336</color>

    <color name="colorPrimaryDark">#D32F2F</color>

    <color name="colorPrimaryLight">#FFCDD2</color>

    <color name="colorAccent">#7C4DFF</color>

    <color name="colorPrimaryText">#212121</color>

    <color name="colorSecondaryText">#727272</color>

    <color name="colorIcons">#FFFFFF</color>

    <color name="colorWhite">#FFFFFF</color>

    <color name="colorDivider">#B6B6B6</color>

</resources>



[ dimens.xml ]


<resources>

    <!-- Default screen margins, per the Android Design guidelines. -->

    <dimen name="nav_header_vertical_spacing">16dp</dimen>

    <dimen name="nav_header_height">160dp</dimen>

    <!-- Default screen margins, per the Android Design guidelines. -->

    <dimen name="activity_horizontal_margin">16dp</dimen>

    <dimen name="activity_vertical_margin">16dp</dimen>

    <dimen name="fab_margin">16dp</dimen>

</resources>



[ strings.xml ]

<resources>
    <string name="app_name">Design</string>

    <string name="navigation_drawer_open">Open navigation drawer</string>
    <string name="navigation_drawer_close">Close navigation drawer</string>

    <string name="action_settings">Settings</string>

    <!-- TODO: Remove or change this placeholder text -->
    <string name="hello_blank_fragment">Hello blank fragment</string>
</resources>


[ styles.xml ]

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>


반응형