개인공부

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

하이후에호 2020. 7. 8. 11:01
반응형

 

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

 

메인 액티비티 전체코드

 

 

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

 

포스팅끝

 

반응형