1. 앱바 추가하기
support library 의 Toolbar 클래스를 사용하여 앱 바를 구현해야 합니다.
support library 의 Toolbar 를 사용하면 앱이 수많은 종류의 기기에서 일관되게 작동하도록 할 수 있습니다.
Activity 에 Toolbar 추가하기
(1) Activity 가 AppCompatActivity 를 확장하는지 확인한다.
(2) AndroidManifest.xml 파일의 <application> 태그의 theme 속성에 NoActionBar 테마 중 하나를 지정한다.
이러한 테마 중 하나를 사용하면 앱이 Native ActionBar 클래스를 사용하여 앱 바를 제공할 수 없습니다.
<application
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
(3) Activity 의 레이아웃에 Toolbar 를 추가한다 아래의 코드는 Toolbar 를 추가하고 Activity 위에 플로팅 방식으로 표시되도록 합니다.
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
(4) Activity 의 onCreate() 메서드에서 setSupportActionBar() 메서드에 Toolbar 를 전달하여 호출합니다.
이 메서드를 통해 Toolbar 를 Activity 의 ActionBar 로 설정합니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
}
2. 액션 추가 및 핸들링
앱바에는 사용자 action 버튼을 추가할 수 있습니다. 이 기능을 활용하면 현재 컨택스트에서 가장 중요한 action 을 앱 상단에 바로 배치할 수 있습니다. 그러나 앱바의 공간은 한정되어 있습니다. 앱이 선언한 action 이 앱바에 들어갈 수 있는 것보다 더 많은 경우 앱바는 초과된 action 을 더보기 메뉴로 보냅니다. 앱은 특정 action 이 앱바가 아니라 더보기 메뉴에 항상 표시되도록 지정할 수도 있습니다.
action 버튼 추가하기
(1) 모든 action 버튼은 menu 리소스에 정의됩니다.
(2) res/menu 디렉토리에 새 XML 파일을 만든 후 앱바에 포함할 각 항목을 <item> 태그로 추가합니다.
아래의 app:showAsAction 속성은 앱바에서 버튼으로 표시할지 여부를 지정하는 속성입니다.
"ifRoom" 을 설정하면 앱바에 공간이 있는 경우 버튼으로 표시되며, 공간이 부족한 경우 더보기 메뉴로 보내집니다.
"never" 를 설정하면 앱바에 표시되지 않고 항상 더보기 메뉴에 표시됩니다.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- "Mark Favorite", should appear as action button if possible -->
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_favorite_black_48dp"
android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
(3) Activity 의 onCreateOptionsMenu(menu: Menu?) 에서 새로만든 menu xml 을 inflate 하도록 오버라이딩 한다.
이 메서드를 오버라이딩하면 안드로이드 시스템에서 Activity 를 시작할 때 앱바에 아이템을 표시하기 위해 onCreateOptionsMenu()를 호출한다.
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_appbar_menu, menu)
return true
}
(4) Activity 의 onOptionsItemSelected(item: MenuItem) 메서드에서 <item> 태그로 지정한 action 버튼이 눌렸을 때 실행할 작업을 정의한다. 해당 MenuItem 을 성공적으로 처리한 경우는 true 를 반환하고 처리하지 못한 경우는 super class 의 구현을 호출해야 한다.
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_favorite -> {
Snackbar.make(binding.root, "Favorite", Snackbar.LENGTH_SHORT).show()
true
}
R.id.action_settings -> {
Snackbar.make(binding.root, "Settings", Snackbar.LENGTH_SHORT).show()
true
}
else -> { super.onOptionsItemSelected(item) }
}
}
3. up 액션 추가
앱에서 사용자는 기본 화면으로 돌아가는 방법을 쉽게 찾을 수 있어야 합니다. 이렇게 만들려면 기본 Activity 를 제외한 모든 Activity 에서 up 버튼을 제공하는 간단한 방법이 있습니다. 사용자가 up 버튼을 클릭하면 앱이 상위 Activity 로 이동하도록 합니다.
up 버튼 만들기
(1) Activity 의 up 기능을 지원하려면 상위 Activity 를 선언해야 합니다. 이렇게 하려면 AndroidManifest.xml 파일에서 android:parentActivityName 속성을 설정하면 됩니다.
android:parentActivityName 속성은 API Level 16 에서 도입되었습니다. 이전 버전의 Android 기기를 지원하려면 아래와 같이 해당 Activity 의 상위 Activity 를 지정해야 합니다.
<activity
android:name="com.example.ChildActivity"
android:parentActivityName="com.example.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.MainActivity" />
</activity>
(2) 상위 Activity 가 있는 Activity 에 up 버튼을 설정하려면 앱바의 setDisplayHomeAsUpEnabled() 메서드를 호출합니다. 일반적으로 이 작업은 onCreate() 메서드에서 Toolbar 를 앱바로 설정한 다음 수행합니다.
그리고 Activity 의 onOptionsItemSelected() 메서드에서 up action 을 포착하지 않다도 됩니다.
대신 onOptionsItemSelected() 메서드에서 super class 의 구현을 호출해야 합니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
'android > Android Developers' 카테고리의 다른 글
Animation 1 - Tween Animation (0) | 2022.11.05 |
---|---|
edge-to-edge (0) | 2022.11.04 |