AppBar Layout
- ToolBar와 다른 View들을 관리하기 위해 제공되는 Layout이다.
- 반드시 CoordinatorLayout 안에 포함되어 있어야 한다.
- CoordinatorLayout 를 통해 다른 View들과 연동될 수 있다.
CoordinatorLayout
- CoordinatorLayout은 View를 배치하기 보단 배치된 View들을 관리하기 위한 목적으로 사용한다.
- CoordinatorLayout에 배치된 View에서 어떠한 사건이 발생하면 이를 감지하여 배치된 다른 View 들에게 전달하거나 스스로 어떤 처리를 할 수 있는 Layout 이다.
1. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/toolbarLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
app:layout_scrollInterpolator="@android:anim/decelerate_interpolator"
app:toolbarId="@+id/toolbar">
<ImageView
android:id="@+id/app_bar_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@android:drawable/sym_def_app_icon" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"></androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
2. MainActivity
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.run{
appBarImage.setImageResource(R.drawable.img_android)
// toolbar를 ActionBar로 사용하도록 설정한다.
// - ActionBar로 설정해줘야 보인다
setSupportActionBar(activityMainBinding.toolbar)
// 접혔을 때의 타이틀 색상
toolbarLayout.setCollapsedTitleTextColor(Color.WHITE)
// 펼쳐졌을 때의 타이틀 색상
toolbarLayout.setExpandedTitleColor(Color.GREEN)
// 접혓을 때의 타이틀 위치
toolbarLayout.collapsedTitleGravity = Gravity.CENTER_HORIZONTAL
// 펼쳐졌을 때의 타이틀 위치 (우측 상단)
toolbarLayout.expandedTitleGravity = Gravity.RIGHT + Gravity.TOP
// activity_main.xml에서 CollapsingToolbarLayout 의 layout_scrollFlags 속성
// "scroll|enterAlways|enterAlwaysCollapsed" : 접었을 때 툴바가 사라진다.
// "scroll|exitUntilCollapsed" : 접었을 때 툴바가 사라지지 않는다.
}
}
}
[챗 GPT 설명]
- setSupportActionBar(activityMainBinding.toolbar)를 사용하여 지정된 Toolbar를 액티비티의 액션 바로 설정합니다. 이렇게 하면 Toolbar가 앱 바의 역할을 수행하게 됩니다.
- toolbarLayout.setCollapsedTitleTextColor(Color.WHITE)을 사용하여 ToolbarLayout의 접혔을 때의 타이틀 텍스트 색상을 설정합니다. 이 경우에는 흰색으로 설정되었습니다.
- toolbarLayout.setExpandedTitleColor(Color.GREEN)을 사용하여 ToolbarLayout의 펼쳐졌을 때의 타이틀 텍스트 색상을 설정합니다. 이 경우에는 초록색으로 설정되었습니다.
- toolbarLayout.collapsedTitleGravity = Gravity.CENTER_HORIZONTAL를 사용하여 ToolbarLayout의 접혔을 때의 타이틀 위치를 설정합니다. 이 경우에는 수평 중앙으로 설정되었습니다.
- toolbarLayout.expandedTitleGravity = Gravity.RIGHT + Gravity.TOP을 사용하여 ToolbarLayout의 펼쳐졌을 때의 타이틀 위치를 설정합니다. 이 경우에는 오른쪽 상단으로 설정되었습니다.
[결과]
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님
'안드로이드 앱 스쿨 2기 > Android' 카테고리의 다른 글
[11주차 - 월] DrawerLayout (0) | 2023.07.03 |
---|---|
[10주차 - 수] TabLayout (0) | 2023.07.02 |
[10주차 - 수] ViewPager2 (0) | 2023.07.02 |
[10주차 - 수] Toolbar (0) | 2023.07.02 |
[10주차 - 수] ActionBarNavigation (0) | 2023.07.02 |