Bottom Navigation View 는 앱 하단 탭에서 화면을 이동할 수 있도록 해주는 기능을 제공합니다.
build.gradle 에 의존성 추가
bottom navigation view 사용을 위해 material design 라이브러리의 의존성을 추가해줍니다.app 레벨의 build.gradle 에 정의합니다.dependencies {
...
implementation 'com.google.android.material:material:1.6.1'
}
Bottom Navigation View 를 구성할 메뉴 목록 만들기
<item android:id="@+id/feed"
android:icon="@drawable/ic_baseline_view_list_24"
android:title="피드" />
<item android:id="@+id/mypage"
android:icon="@drawable/ic_baseline_person_24"
android:title="마이페이지"/>
<item android:id="@+id/settings"
android:icon="@drawable/ic_baseline_settings_24"
android:title="설정" />
메인화면에서 불러오기
<data>
<variable
name="activity"
type="com.jae464.placememo.MainActivity" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/bottomNavigationView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="0dp"
app:menu="@menu/bottom_navigation_menu"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fragmentContainer" />
</androidx.constraintlayout.widget.ConstraintLayout>
app:menu에 아이템 목록을 만들었던 bottom_navigation_menu를 넣어줍니다.
package com.jae464.placememo
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import com.jae464.placememo.databinding.ActivityMainBinding
import com.jae464.placememo.presentation.feed.FeedFragment
import com.jae464.placememo.presentation.home.HomeFragment
import com.jae464.placememo.presentation.mypage.MyPageFragment
import com.jae464.placememo.presentation.settings.SettingsFragment
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.activity = this
binding.bottomNavigationView.setOnItemSelectedListener { item ->
when(item.itemId) {
R.id.home -> {
replaceFragment(HomeFragment())
true
}
R.id.feed -> {
replaceFragment(FeedFragment())
true
}
R.id.mypage -> {
replaceFragment(MyPageFragment())
true
}
R.id.settings -> {
replaceFragment(SettingsFragment())
true
}
else -> false
}
}
replaceFragment(HomeFragment())
}
private fun replaceFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.apply {
replace(R.id.fragmentContainer, fragment)
commit()
}
}
}
setOnItemSelectedListener 를 메뉴 아이템이 선택되었을때 수행할 내용을 구현합니다.
여기서는 fragment 를 교체하여 선택된 화면을 보여주도록 했습니다.
fragment 는 supportFragmentManager를 통해 위와 같이 교체할 수 있습니다.
각각의 fragment 에는 해당 메뉴의 이름을 나타내도록 아래와 같이 만들었습니다.
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.home.HomeFragment">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="Home" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
package com.jae464.placememo.presentation.home
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.jae464.placememo.R
class HomeFragment : Fragment(R.layout.fragment_home) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
위와 같이 FeedFragment, MyPageFragment, SettingsFragment 를 만들었습니다.
