안드로이드 앱에 BottomNavigationView(Bottom Navigation Bar)를 추가하는 방법을 설명합니다.
BottomNavigationView(Bottom Navigation Bar) 는 Design Support Library v25에서 추가되었습니다.
Bottom Navigation Bar에 있는 버튼을 터치하면 화면 중앙에 있는 TextView에 터치한 버튼을 표시해주는 간단한 예제입니다.
![](https://lh6.googleusercontent.com/R0KBlSOwB_L_V-CcABrwwU0mGmIkg2QBFLax05penZ-3rHfpuub8Qy-OBLaJaEBBAyqWgYGhSkr7Io_4QaHMZtCct067FQ3glPX3xApS4kYvxO-pmdQSqAM8zyRb-wxc_X9WSwcQ)
![](https://lh3.googleusercontent.com/ofvGeWb2L9G_NGS3Dea0axZKJty39P8Yxe0l5n_yNGCiwLUBKvREJ1X-6sy8bHg5EKZXGHcEJ3UMy8p17dGTqZSYR_97IL6JSrhv_l_eI-RJIaZJnlqKTKG18bzyN1MLohnxJq8m)
1. Bottom Navigation Bar에 보여줄 버튼 개수만큼의 아이콘이 필요합니다.
포스팅에서는 다음 3개의 벡터 이미지(SVG)를 사용했습니다.
https://material.io/tools/icons/?icon=search&style=baseline
https://material.io/tools/icons/?icon=arrow_upward&style=baseline
https://material.io/tools/icons/?icon=arrow_downward&style=baseline
벡터 이미지(SVG)를 프로젝트에 추가하는 방법은 아래 포스팅을 참고하세요.
2. 화면에 보여줄 메뉴 리소스를 추가합니다. 메뉴 리소스에서 앞에서 준비한 아이콘을 사용합니다.
app을 선택하고 마우스 우클릭하여 보이는 메뉴에서 New > Android Resource File을 선택합니다.
![](https://lh5.googleusercontent.com/Zx3K-oI9crZtv9m3N_L6dgbzY8oJSkCpYRHM77RXyvaURuBftMiJWgmxDUJ5MVz_5eLCpQiAgJJi85F5-dtU1ZGExxWzYdJ3FIXmg0iJl0WYD4vPT0repXGWIc52XE201jPsoiDt)
3. File name 항목에 bottombar_menu.xml을 입력하고 Resource type 항목에서 Menu를 선택합니다. OK 버튼을 클릭합니다.
![](https://lh3.googleusercontent.com/OFZbxeWIFWTPxd0FQAOyqoXPE72Sk4_oEDvG2Y09vgpHKQYRmesNXWbVx_Hc5AiZCYm8bsCGQkxofxlqx6OKVkI8y3Uj48dL2XFe8TqD3knUO5KaEBDcHd_wQ9rz6XcbpVAjOK03)
4. 추가된 메뉴 리소스 파일에 다음 코드를 입력합니다. Bottom Navigation Bar에 보여줄 아이콘과 타이틀을 지정해주는 겁니다.
![](https://lh6.googleusercontent.com/IMIpVxKfa7i7hD_h_cXuHiRQUA2X6XMc7AB_Fpc3TykHn7ARTAnxBKrEM4TwsyIix3-ZsGVid7qPrN30iqsQNHcFBmlHAisamDjoMeXpgGO5d-V31asv-gr-OBjwA1gxMTf5qr64)
Java 코드에서는 item에 지정된 id를 확인하여 어떤 버튼이 눌러졌는지 판단합니다.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menuitem_bottombar_up" android:icon="@drawable/ic_baseline_arrow_upward_24px" android:title="Up" app:showAsAction="ifRoom"/>
<item android:id="@+id/menuitem_bottombar_down" android:icon="@drawable/ic_baseline_arrow_downward_24px" android:title="Down" app:showAsAction="ifRoom"/>
<item android:id="@+id/menuitem_bottombar_search" android:icon="@drawable/ic_baseline_search_24px" android:title="Search" app:showAsAction="ifRoom"/>
</menu> |
5. build.gradle 파일에 com.android.support:design을 추가합니다.
![](https://lh3.googleusercontent.com/ieA1_C5eYEMZFEaYebLqKyPbPfgKqd_sGZMRvotxNzTcx7S571FRJgE6vKUopCisTVPQz9oGcNffDqefZE6SxSd-9vCYDhz3DbFmTsbk4CSIGtTximAx_uL5gUGOFAameFLWnE5z)
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.android.support:design:27.1.1' } |
6. activity_main.xml 파일을 다음 코드로 변경합니다.
여기에서는 앱화면 하단에 Bottom Navigation Bar를 보여줍니다.
![](https://lh4.googleusercontent.com/VrXkdM3p-L_XYYaQQ0skQthFi3f1QdtNjT4gIsyQIbG4skQHCLYVhfCBIycqGOigUYh2_EO9QFaXoYI0J4-zT5AK9WFBWuL6gh5Tu8_C1p2VkPMWBZCwyrQJVtlABK_-0EkZVNzI)
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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">
<TextView android:id="@+id/textview_main_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="200dp" android:text="Show Message" app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView_main_menu" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="spread_inside" />
<android.support.design.widget.BottomNavigationView android:id="@+id/bottomNavigationView_main_menu" android:layout_width="match_parent" android:layout_height="wrap_content" app:itemBackground="?attr/colorPrimary" app:itemIconTint="@android:color/white" app:itemTextColor="@android:color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/textview_main_message" app:layout_constraintVertical_chainStyle="spread_inside" app:menu="@menu/bottombar_menu" />
</android.support.constraint.ConstraintLayout> |
7. MainActivity.java 파일에 다음 코드를 추가합니다.
package com.tistory.webnautes.bottomnavigationviewexample;
import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.util.Log; import android.view.MenuItem; import android.widget.TextView;
import org.w3c.dom.Text;
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
// 버튼 누른 결과를 보여주기 위해 TextView를 사용합니다. final TextView message = (TextView)findViewById(R.id.textview_main_message);
// 버튼 클릭시 사용되는 리스너를 구현합니다. BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView_main_menu); bottomNavigationView.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// 어떤 메뉴 아이템이 터치되었는지 확인합니다. switch (item.getItemId()) {
case R.id.menuitem_bottombar_up:
message.setText("Up 버튼을 눌렀습니다.");
return true;
case R.id.menuitem_bottombar_down:
message.setText("Down 버튼을 눌렀습니다.");
return true;
case R.id.menuitem_bottombar_search:
message.setText("Search 버튼을 눌렀습니다.");
return true; } return false; } });
} } |
참고
http://blog.iamsuleiman.com/using-bottom-navigation-view-android-design-support-library/
https://developer.android.com/reference/android/support/design/widget/BottomNavigationView
2018년 8월 9일에 마지막으로 업데이트 되었습니다.