-
Material LibraryAndroid 2024. 7. 31. 15:54
12-1. AppBar
CollapsingToolbarLayout
<com.google.android.material.appbar.CollapsingToolbarLayout ... app:contentScrim app:expandedTitleMarginBottom app:expandedTitleMarginStart app:layout_scrollFlags app:title> <View1 app:layout_collapseMode/> ... </com.google.android.material.appbar.CollapsingToolbarLayout>
12-2. TabLayout(com.google.android.material.tabs.TabLayout)
Tab 버튼을 동적으로 만드는 경우(kotlin)
val tabLayout = binding.tabs val tab1: TabLayout.Tab = tabLayout.newTab() tab1.text = "Tab1" tab1.icon = .. tabLayout.addTab(tab1)
Tab 버튼을 정적으로 만드는 경우(xml)
<com.google.android.material.tabs.TabLayout ..> <com.google.android.material.tabs.TabItem .. android:text /> .. </>
Tab 버튼 event 처리
val tabLayout = binding.tabs tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener { // tab 버튼 선택할 때 event override fun onTabSelected(tab: TabLayout.Tab?) { // 중요한 부분 val transaction = supportFragmentManager.beginTransaction() when(tab?.text) { "Tab1" -> transaction.replace(R.id.tabContent, OneFragment()) "Tab2" -> .. } transaction.commit() } // 선택된 탭 버튼을 다시 선택할 때 event override fun onTabReselected(tab: TabLayout.Tab?) { // 생략 } // 다른 탭 버튼을 눌러 선택된 탭 버튼이 해제될 때 event override fun onTabUnSelected(tab: TabLayout.Tab?) { // 생략 } })
이때, tabContent 는 FrameLayout 이다.
tabGravity(탭 버튼 정렬하기)
- fill(default) : 탭 버튼을 가로 등분 배치
- center : 탭 버튼을 가운데 정렬
tabMode(스크롤 설정하기)
- fixed(default): not scrolling
- scrollable: 탭 버튼이 왼쪽부터 나열, 모두 출력할 수 없으면 자동으로 가로 스크롤이 생김
TabHost TabLayout 플랫폼 API 에서 레벨 1부터 제공하는 뷰 Material Library 에서 제공 과거에 주로 사용 최근에 사용 API 30 에서 deprecated 됨 공식 매뉴얼에서 사용하라고 권함 탭 버튼을 다양하게 구성하기 어려움 탭 버튼을 다양하게 구성하기에 용이함 ViewPager2 와 TabLayout 연동
1. tabLayout 과 ViewPager 등록(xml 파일)
<LinearLayout xmlns:android:"https://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" android:orientation="vertical"> <com.google.android.material.tabs.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="scrollable"/> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent"/> // 이 부분이 잘 이해가 가지 않음 </LinearLayout>
2. tabLayout 과 ViewPager 연동(코틀린 코드)
TabLayoutMediator(tabLayout, viewPager) { tab, position -> tab.text = "Tab${(position+1)}" }.attach()
12-3. Navigation View(DrawerLayout Configuration)
1. Navigation View 등록
<androidx.drawerlayout.widget.DrawerLayout ... > <LinearLayout ... > ... </LinearLayout> // DrawerLayout 의 두번째 태그로 NavigationView 지정 <com.google.android.material.navigation.NavigationView android:id="@+id/main_drawer_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/navigation_header" // NavigationView 의 위쪽을 어떻게 출력할 지 지정 app:menu="@menu/menu_navigation" /> // NavigationView 의 아래쪽에 출력할 항목 지정 </androidx.drawerlayout.widget.DrawerLayout>
2. 항목 선택 이벤트 핸들러
navigationView.setNavigationItemSelectedListener { Log.d("kkang", "navigation item clicked : ${it.title}") true }
12-4 Extended FAB(Floating Action Button)
Material Library 가 처음 나왔을 때는 FAB(FloatingActionButton) 을 제공했지만, 지금은 버튼에 문자열까지 출력할 수 있는 Extended FAB 을 제공한다.
1. xml 코드
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton android:text="extended FAB" app:icon="@android:drawable/.." />
text 속성을 꼭 지정하지 않아도 된다.
2. 액션 버튼 조절(코틀린)
binding.extendedFab.setOnClickListener { when(binding.extendedFab.isExtended) { // 아이콘과 문자열이 함께 표시된 경우 true -> binding.extendedFab.shrink() false -> binding.extendedFab.extend() } }
'Android' 카테고리의 다른 글
브로드캐스트 리시버(Broadcast Receiver) (0) 2024.08.28 Activity Component (0) 2024.08.13 ReadMe 작성 추천 링크 (0) 2024.07.02 트러블 슈팅 - 텍스트 에디터 (0) 2024.06.26 QA - 테스트 시나리오 만들기 (0) 2024.06.18