티스토리 뷰
하단 탭은 액션바로 구성했던 상단 탭과는 달리 네비게이션 바를 사용하여 구성하며, BottomNavigationView 위젯으로 만들 수 있다.
바로 예제를 확인해보자.
하단 탭은 res/menu 디렉토리 안에 menu_botton.xml 레이아웃 파일을 새로 생성하여 만든다.
◎ res/menu/menu_botton.xml
<?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/tab1"
app:showAsAction="ifRoom"
android:enabled="true"
android:icon="@android:drawable/ic_dialog_email"
android:title="이메일" />
<item
android:id="@+id/tab2"
app:showAsAction="ifRoom"
android:icon="@android:drawable/ic_dialog_info"
android:title="정보" />
<item
android:id="@+id/tab3"
app:showAsAction="ifRoom"
android:enabled="true"
android:icon="@android:drawable/ic_dialog_map"
android:title="위치" />
</menu>
다음으로 activity_main.xml 에서 BottomNavigationView 위젯을 FrameLayout 하단에 배치한다.
◎activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:itemBackground="?colorPrimary"
app:menu="@menu/menu_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
BottomNavigationView의 menu 속성에 menu/menu_layout.xml 파일을 넣어준다.
◎MainActivity.java
package com.example.samplebottomtab;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class MainActivity extends AppCompatActivity {
Fragment1 fragment1;
Fragment2 fragment2;
Fragment3 fragment3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment1).commit();
BottomNavigationView bottomNavigation = findViewById(R.id.bottom_navigation);
bottomNavigation.setOnItemSelectedListener(new BottomNavigationView.OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.tab1:
Toast.makeText(getApplicationContext(), "첫 번째 탭 선택됨", Toast.LENGTH_LONG).show();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment1).commit();
return true;
case R.id.tab2:
Toast.makeText(getApplicationContext(), "두 번째 탭 선택됨", Toast.LENGTH_LONG).show();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment2).commit();
return true;
case R.id.tab3:
Toast.makeText(getApplicationContext(), "세 번째 탭 선택됨", Toast.LENGTH_LONG).show();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment3).commit();
return true;
}
return false;
}
});
}
}
MainActivity.java 클래스의 구성은 상단 탭을 구성했을 때와 별로 차이점은 없지만, BottomNavigationView 객체의 itemSelected 이벤트 메서드는 Item 객체를 인자로 받아서, 해당 Item의 ID 값을 확인하여 직접 비교한 뒤 프래그먼트를 변경한다.
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Navigation Drawer (0) | 2022.03.27 |
---|---|
[Android] View Pager2 (0) | 2022.03.25 |
[Android] Tab 1: Tab 이해하기, 상단 Tab 구성 (0) | 2022.03.24 |
[Android] Action Bar 2: 액션바에 View 삽입 (0) | 2022.03.23 |
[Android] Action Bar 1: 메뉴 이해하기 (0) | 2022.03.23 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- redux
- javascript
- await
- 인천 구월동 이탈리안 맛집
- react
- Promise
- react-native
- 인천 구월동 맛집
- redux-thunk
- 맛집
- Async
- 이탈리안 레스토랑
- 파니노구스토
- 정보보안기사 #실기 #정리
- AsyncStorage
- Total
- Today
- Yesterday