인코딩의 Decoding

728x90
반응형

TabLayout 전체 화면

다음과 같이 클릭이나 스와이프를 통해 좌우 화면으로 이동할 수 있는 TabLayout을 구현해 보겠습니다.

 

1. Project 생성

 

"Start a new Android Studio project" 클릭

 

"Empty Activity" 선택 후 "Next" 클릭

 

Name은 "Tab Layout"으로 지정 후 "Finish" 클릭

 

2. Tab Layout 설정

 

TabLayout을 적용하기 위해서 Gradle > build.gradle(Module: app) 을 클릭하고 dependencise 부분에 다음과 같은 implementation 구문을 추가합니다.

implementation 'com.google.android.material:material:1.0.0'

 

이번 프로젝트에서는 TabLayout과 함께 Toolbar를 사용하는데 Toolbar를 사용하기 위해서는 value > style.xml을 클릭하고 다음과 같은 구문을 추가해줍니다.

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

 

3. 설정한 TabLayout과 Toolbar를 mainActivity에 추가

 

mainActivity 화면을 설정하는 activity_main.xml을 더블 클릭하고 다음과 같은 소스를 추가해줍니다.

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        />


    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/toolbar"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/tab_layout"
        />

</RelativeLayout>

 

4. Fragment 추가

 

tap 화면 마다 나타나는 화면은 "Fragment"를 사용해서 나타낼 수 있습니다.

 

Fragment를 추가하기 위해 MainActivity가 있는 폴더에서 오른쪽 마우스를 클릭하고

File > New > Fragment > Fragment(Blank)를 선택하고 Name은 "TabFragment1" 지정

Fragment Layout Name은 "tab_fragment1"으로 지정

아래 체크박스 두개는 해제해줍니다.

 

Tab이 세개 있는 화면을 만들 예정이라 같은 패턴으로 Fragement를 두개 더 만들어줍니다.

(ex. TabFragement2 - tab_fragment2 )

 

5. FragmentLayout 수정

 

생성한 Fragment를 간단하게 수정해보겠습니다.

res > layout > tab_fragment를 더블 클릭하고 다음과 같이 수정합니다.

<?xml version="1.0" encoding="utf-8"?>
<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=".TabFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Fragment1"
        android:textAppearance="?android:attr/textAppearanceLarge"/>

</RelativeLayout>

 

나머지 Fragment도 위의 소스처럼 수정합니다. android:text 부분만 다르게 설정 ( ex. tab_fragment2.xml - "Fragment2" )

 

6. PagerAdapter 추가

 

위에서 추가한 Fragment를 Activity에 각각 보여주려면 "PagerAdapter"를 추가해야 합니다.(adapter-layout manager)

 

MainActivity가 있는 폴더를 우클릭

File > New > Java Class 클릭

Superclass는 FragmentStatePagerAdapter 입력

 

생성하면 다음과 같이 빨간줄이 나타나는데 Alt + Enter를 눌려서 해결

 

그리고 소스를 다음과 같이 수정합니다.

package android.example.tablayout;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;

public class PagerAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;

    public PagerAdapter(@NonNull FragmentManager fm, int NumOfTabs) {
        super(fm, NumOfTabs);
        this.mNumOfTabs = NumOfTabs;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0: return new TabFragment();
            case 1: return new TabFragment2();
            case 2: return new TabFragment3();
            default: return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}

 

7. Toolbar와 TabLayout MainActivity에 inflate(생성) 하기

 

main_activity.xml에 선언했던 Toolbar와 TabLayout을 MainActivity.java에서 선언해줘야합니다.

onCreate() 메소드 하단에 다음과 같이 소스를 수정해줍니다.

 

 

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

        androidx.appcompat.widget.Toolbar toolbar =
                findViewById(R.id.toolbar);

        setSupportActionBar(toolbar);

        TabLayout tabLayout = findViewById(R.id.tab_layout);

        tabLayout.addTab(tabLayout.newTab().setText("Fragment1"));
        tabLayout.addTab(tabLayout.newTab().setText("Fragment2"));
        tabLayout.addTab(tabLayout.newTab().setText("Fragment3"));

        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    }

 

8. ViewPager에 PagerAdapter 붙이기

 

tab 별 화면은 Fragment로 설정되고 각 Fragment는 ViewPager 안에서 보여지며 ViewPager는 PagerAdapter에 의해 manager ( 어떤 화면이 보여져야 하는지) 됩니다.

그래서 ViewPager에 PagerAdapter를 붙이는 과정이 필요합니다.

MainActivity.java의 onCreate() 하단에 다음과 같이 소스를 추가해줍니다.

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

        androidx.appcompat.widget.Toolbar toolbar =
                findViewById(R.id.toolbar);

        setSupportActionBar(toolbar);

        TabLayout tabLayout = findViewById(R.id.tab_layout);

        tabLayout.addTab(tabLayout.newTab().setText("Fragment1"));
        tabLayout.addTab(tabLayout.newTab().setText("Fragment2"));
        tabLayout.addTab(tabLayout.newTab().setText("Fragment3"));

        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        final ViewPager viewPager = findViewById(R.id.pager);
        final PagerAdapter adapter = new PagerAdapter
                (getSupportFragmentManager(), tabLayout.getTabCount());

        viewPager.setAdapter(adapter);

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
            @Override
            public void onTabSelected(TabLayout.Tab tab){
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab){
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab){
            }

        });
        
    }

 

9. Run

 

짜잔 완성입니다 :)

감사합니다!

 

참고 - Google Codelabs (https://codelabs.developers.google.com/

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band