본문 바로가기

개인공부

안드로이드 : 네비게이션 메뉴바 만들기.

반응형

 

Navigation Drawer Activity를 이용하여 네비게이션을 기능을 만들어 보도록 하겠습니다.

 

새프로젝트를 만듭니다.

 

 

Navigation Drawer Activity를 선택하고 프로젝트를 생성합니다.

 

 

이제 화면 전환에 사용될 레이아웃을 추가해주도록 하겠습니다.

 

파일 네임과 root_element를 다음과 같이 변경합니다.

 

 

화면이 뜨면 텍스트를 추가해주고 텍스트 크기를 (textAppearance)를 키웁니다.

 

첫 번째 화면이라고 만든다음 해당 레이아웃을 복사후 붙여넣기를 통해서 두번째 레이아웃도 만듭니다.

 

이름을 변경해서 붙여넣기

 

추가된 화면

 

 

이제 java파일에서 새로운 class를 추가해주겠습니다.

 

 

이름을 FirstLayout으로 만들어줍니다.

 

 

Fragment를 상속받습니다.

여기서 Arlt + Enter을 눌러줍니다.

 

이렇게 import 해줍니다.

 

프로그멘트 추가

 

 

이후 Arlt + Insert를 눌러서 Override Methods를 해줍니다.

 

Fragement에 있는 다양한 함수중에서 하나를 선택해서 사용할수 있습니다.

onCreateView를 선택해줍니다.

 

 

다음과같이 수정해줍니다.

v = inflater.inflate(R.layout.first_layout,container,false); return v;

 

 

마찬가지로 FirstLayout을 복샇나다음 SecondLaout을 만들어줍니다.

 

마찬가지로 해당하는 내용을 바꾸어줍니다.

 

menu에 main_drawer에서 첫번째 레이아웃과 두번째 레이아웃을 맵핑시켜줍니다.

<item은 하나하나의 메뉴바 표시입니다.

nav_붙여주시고 그다음에 맵핑시킬 레이아웃을 입력시켜줍니다.

title에는 보여줄 메세지를 입력합니다.

 

 

content_main을 사용하기위해서 래이아웃 콘테트 메인에서

id를 추가해줍니다. 추가안하면 플레그먼트를 추가할곳을 찾지를 못함

 

 

메인 엑티비티로 가서 아래와 같이 바꿔줍니다

메뉴바에서 플레그먼트와 연결된 텍스트들을 선택했을시

Toast 이벤트를 사용하고 그후

content_main에 새로운 FirstLaouy또는 SecondLayout을 reploace 시킵니다.

 

package org.techtown.navigation_test;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentManager;
import android.text.Layout;
import android.view.FrameMetrics;
import android.view.View;
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.widget.Toast;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        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.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        FragmentManager manager = getSupportFragmentManager();


        if (id == R.id.nav_first_layout) {
            Toast.makeText(MainActivity.this, "첫 번째를 선택했습니다.", Toast.LENGTH_SHORT).show();
            manager.beginTransaction().replace(R.id.content_main,new FirstLayout()).commit();
        } else if (id == R.id.nav_second_layout) {
            Toast.makeText(MainActivity.this, "두 번째를 선택했습니다.", Toast.LENGTH_SHORT).show();
            manager.beginTransaction().replace(R.id.content_main,new SecondLayout()).commit();
        } 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;
    }
}

 

메인 액티비티 전체코드

 

 

이동되는 모습을 확인 할수있습니다.

 

포스팅끝

 

반응형