안녕하세요, 여러분! 오늘은 자바를 활용한 안드로이드 앱 개발 강좌의 일환으로 탭 레이아웃을 구성하는 방법에 대해 자세히 알아보겠습니다. 탭 레이아웃은 사용자 인터페이스(UI)를 보다 직관적으로 만들고 여러 화면을 쉽게切换할 수 있도록 도와줍니다. 이번 튜토리얼에서는 탭 레이아웃의 기본 구조와 다양한 구성 요소, 그리고 자바 코드를 활용한 실습 예제를 통해 이해를 높여보도록 하겠습니다.
탭 레이아웃이란?
탭 레이아웃은 여러 화면 또는 뷰를 탭 버튼을 사용하여 전환할 수 있도록 하는 UI 구성 요소입니다. 사용자는 탭 버튼을 클릭하여 서로 다른 정보를 손쉽게 탐색하고 접근할 수 있습니다. 안드로이드의 탭 레이아웃은 주로 TabLayout
, ViewPager
, Fragment
등을 조합하여 구현됩니다.
탭 레이아웃 구현을 위한 기초 준비
탭 레이아웃을 구현하기 위해서는 Android Studio를 사용하여 새로운 프로젝트를 생성해야 합니다. 이번 예제에서는 기본적인 요구 사항으로 Android API 21 이상을 지원하는 프로젝트를 만들도록 하겠습니다.
- Android Studio를 실행하고 “New Project”를 선택합니다.
- “Empty Activity”를 선택한 후 다음 화면에서 프로젝트 이름과 패키지 정보를 입력합니다.
- 최종적으로 “Finish” 버튼을 클릭하여 프로젝트를 생성합니다.
Gradle 설정
프로젝트의 build.gradle 파일에 필요한 의존성을 추가해야 합니다.
다음 코드를 build.gradle (Module: app)
파일의 dependencies
섹션에 추가합니다.
implementation 'com.google.android.material:material:1.4.0'
레이아웃 파일 구성
탭 레이아웃을 구성하기 위한 레이아웃 파일을 작성하겠습니다. 프로젝트의 res/layout/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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tabLayout"/>
</RelativeLayout>
MainActivity.java 파일 수정
MainActivity.java 파일을 열어서 탭 레이아웃과 뷰 페이저를 설정하는 코드를 작성하겠습니다.
아래 코드를 MainActivity.java에 붙여넣으세요.
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
tabLayout = findViewById(R.id.tabLayout);
setupViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new FragmentOne(), "탭 1");
adapter.addFragment(new FragmentTwo(), "탭 2");
adapter.addFragment(new FragmentThree(), "탭 3");
viewPager.setAdapter(adapter);
}
}
Fragment 작성하기
각 탭은 Fragment로 구성됩니다. FragmentOne, FragmentTwo, FragmentThree를 생성하겠습니다.
아래 코드를 참고하여 각각의 Fragment 파일을 생성하세요.
FragmentOne.java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class FragmentOne extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_one, container, false);
}
}
FragmentTwo.java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class FragmentTwo extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_two, container, false);
}
}
FragmentThree.java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
public class FragmentThree extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_three, container, false);
}
}
Fragment 레이아웃 파일 만들기
각 Fragment에 대한 레이아웃 파일을 생성합니다. res/layout
폴더 내에 fragment_one.xml, fragment_two.xml, fragment_three.xml 파일을 각각 만들어 아래의 내용을 추가하세요.
fragment_one.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="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment 1"
android:layout_centerInParent="true"/>
</RelativeLayout>
fragment_two.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="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment 2"
android:layout_centerInParent="true"/>
</RelativeLayout>
fragment_three.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="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fragment 3"
android:layout_centerInParent="true"/>
</RelativeLayout>
ViewPagerAdapter 클래스 생성
ViewPager와 Fragment를 연결하는 Adapter 클래스를 생성합니다. ViewPagerAdapter라는 클래스를 만들어 아래의 코드를 작성하세요.
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
fragmentList.add(fragment);
fragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitleList.get(position);
}
}
앱 실행 및 결과 확인
모든 코드가 준비되었으면 Android Studio에서 앱을 실행해 보세요.
에뮬레이터 또는 실제 디바이스에서 앱을 테스트하면, 세 개의 탭 버튼이 표시되고, 각 탭을 클릭하면 해당하는 Fragment가 나타나는 것을 확인할 수 있을 것입니다.
마무리
지금까지 자바를 활용한 안드로이드 앱 개발 강좌에서 탭 레이아웃을 구성하는 방법을 알아보았습니다.
이번 강좌를 통해 여러분은 안드로이드 UI 디자인에서 일반적으로 사용되는 탭 레이아웃을 구현하는 방법을 배우셨습니다.
이러한 기본 지식을 통해 여러분의 프로젝트에 더 많은 기능을 추가하고, 더 나은 사용자 경험을 제공하는 앱을 만들어보세요!
궁금한 점이 있거나 추가적인 질문이 있으시면 댓글 남겨주세요. 앞으로도 유용한 안드로이드 개발 관련 강좌를 많이 준비하겠습니다.
감사합니다!