본문 바로가기
안드로이드

뷰 페이저와 바로가기 메뉴 만들기

by 희안 2021. 4. 22.

뷰 페이저

뷰 페이저는 손가락으로 좌우 스크롤해서 넘겨볼 수 있는 기능을 제공한다. 만약 화면 전체를 뷰 페이저로 채운다면 좌우 스크롤을 통해 화면을 넘겨볼 수 있게 된다. 일부분만 차지하면 그 부분만 좌우 스크롤이 동작! 뷰 페이저는 그 안에 프래그먼트를 넣을 수 있고 좌우 스크롤로 프래그먼트를 전환하게 된다. 

 

뷰 페이저 내부에서 어댑터라는 것과 상호작용하게 되어 있는데 이건 뷰 페이저가 여러 아이템 중에 하나를 보여주는 방식으로 동작하기 때문이다. (*어댑터는 리싸이클러뷰와 관련!) 

 

MyPagerAdapter 클래스는 내부 클래스로 만들어졌고 FragmentStatePagerAdapter를 상속했다. 어댑터는 뷰 페이저에 보여줄 각 프래그먼트를 관리하는 역할을 하며, 뷰 페이저에 설정하면 서로 상호작용하면서 화면에 표시해주게 된다. 이 클래스 안에는 프래그먼트들을 담아둘 ArrayList 객체를 만들었다. 현재 FragmentStatePagerAdapter 가 deprecated가 뜨면서 파라미터를 2개 입력하게 되어있는데, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 를 권장사용하게 한다.

예시에선 FragmentStatePagerAdapter를 사용하지 않고 FragmentStateAdapter를 사용하고 viewpager도 viewpager2를 사용했다.

public class viewpager_activity extends AppCompatActivity {
    ViewPager2 viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_viewpager_activity);

        viewPager  = findViewById(R.id.pager);
        viewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
        viewPager.setOffscreenPageLimit(2);

        MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), getLifecycle());
        viewPager.setAdapter(adapter);
    }

    class MyPagerAdapter extends FragmentStateAdapter {
        int itemCount = 3;

        public MyPagerAdapter(FragmentManager fm, Lifecycle cycle) {
            super(fm, cycle);
        }

        @Override
        public int getItemCount() {
            return itemCount;
        }

        @NonNull
        @Override
        public Fragment createFragment(int position) {
            switch(position) {
                case 0: {
                    return new tab_fragment1();
                }
                case 1: {
                    return new tab_fragment2();
                }
            }
            return new tab_fragment1();
        }

    }
    }

 

실제로는 넘겨지는 화면이지만 한 화면만 보이게 캡쳐했다. ㅎㅎ

 

바로가기 메뉴

바로가기 메뉴는 화면 좌측 상단에 위치한 햄버거 모양 아이콘 눌렀을 때 나타나는 화면을 말한다. 안드로이드에선 NavigationDrawer라는 이름으로 사용이된다. 이 메뉴는 몇개의 화면에서 공통으로 보여줄 수 있기 때문에 빠르게 메뉴기능에 접근하고자 할 때 유용하게 사용된다. 바로가기 메뉴를 추가하는 쉬운 방법은 Activity를 추가할때 Navigation Drawer Activity로 추가하는 방법이다. 이 Activity는 theme이 @style/AppTheme.NoActionBar로 설정된다. 즉, 위에 액션바가 없는 Theme을 가진다. xml에서 액션바를 만들어서 입혀줘야 한다!

 

Navigation Drawer Activity로 추가했다면 xml에 자연스럽게 이미 NavigationView가 생겼을텐데 이게 바로 바로가기 메뉴를 하는 역할이다. 이 중 app:headerLayout은 상단에 표시되면서 프로필 등을 보여줄 수 있도록 하고 app:menu는 그 아래에 메뉴를 보여줄 수 있도록 한다. 

app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"

onNavigationSelected()를 이용해서 선택됐을때 행동들을 설정할 수 있고, setNavigationItemSelectedListener를 onCreate에 설치해둬서 네비게이션이 어떤 메뉴가 선택되는지 리스너를 설정해둘 수 있다.

 

GravityCompat은 x축을 기준으로 담고있는 container의 start나 end로 

drawer.isDrawerOpen(GravityCompat.START)) 이런식으로 사용될 수 있다. 이건 x축기준이라 왼쪽에서 열릴땐 start로 해주고 오른쪽으로 네비게이션 뷰를 두고 싶을땐 END로 변경해줘야한다. 

댓글