API
ActionBar
액티비티의 앱바로 사용하는 클래스다. 액티비티의 기본 구성요소이므로 따로 레이아웃에 위젯을 선언하지 않아도 된다.
Toolbar
AndroidX 라이브러리의 클래스다. ActionBar
와 목적은 같지만 낮은 빌드 버전에 대한 호환성 및 더 많은 기능을 제공한다.
프레임워크가 제어하는 ActionBar
와 달리 개발자가 제어한다.
업버튼 표시하기
액션바에 앱버튼을 표시하면 눌렀을 때 상위 액티비티로 돌아가는 기능을 구현할 수 있다.
상위 액티비티 지정하기
매니페스트 파일 안 activity
태그의 parentActivityName
속성으로 상위 액티비티를 지정할 수 있다.
<activity
android:name=".ChildActivity"
android:parentActivityName=".ParentActivity"
... >
...
</activity>
업버튼 활성화하기
액티비티에서 ActionBar
를 가져온 다음 setDisplayHomeAsUpEnabled(Boolean)
에 true
를 전달하면 업버튼이 활성화된다.
하지만 매니페스트에서 parentActivityName
속성을 사용하지 않았다면 업버튼을 눌러도 아무런 동작도 하지 않는다.
업버튼을 누를 때 실행되는 로직을 구현하려면 액티비티의 onSupportNavigateUp()
콜백 메서드를 재정의해야 한다.
AppCompatActivity.getSupportActionBar(): ActionBar?
해당 액티비티의 액션바(ActionBar
객체)를 반환한다.ActionBar.setDisplayHomeAsUpEnabled(Boolean)
업버튼 활성화 여부를 결정한다.AppCompatActivity.onSupportNavigateUp(): Boolean
업버튼을 눌렀을 때 호출되는 콜백 메서드. 성공적으로 동작했다면true
를 반환한다.
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
override fun onSupportNavigateUp(): Boolean {
/* 업버튼을 눌렀을 때 실행되는 로직 */
}
...
}
액션 구성하기
menu 리소스를 사용하여 액션바에 메뉴(액션)를 표시할 수 있다.
<menu>
태그의 하위 태그로 <item>
태그를 선언하여 메뉴 아이템을 선언할 수 있다.
각 아이템에는 다음 속성을 지정할 수 있다.
android:id
리소스 식별자android:icon
아이콘으로 사용할 drawable 리소스android:title
제목으로 사용할 문자열app:showAsAction
아이템이 액션바에 표시되는 방식을 나타내는 속성. 값에 따른 결과는 다음과 같다.ifRoom
표시될 공간이 있다면 액션바에 표시된다. 그렇지 않으면 오버플로우 메뉴에 포함된다.always
항상 액션바에 표시한다.never
액션바에 표시하지 않고 항상 오버플로우 메뉴로 나타난다.
액티비티의 onCreateOptionsMenu()
콜백은 액션 메뉴를 생성할 때 호출된다. 이때 메뉴가 표시되는 인터페이스를 나타내는 Menu
객체가 파라미터로 전달되는데, MenuInflater
로 menu
리소스를 inflate하면 액션바에 리소스에 있던 액션들이 표시된다.
액션바 대신 툴바 사용하기
ActionBar
대신 Toolbar
를 사용하면 더 많은 기능을 구현할 수 있다.
Toolbar
를 사용하려면 다음처럼 themes.xml
파일을 수정하여 ActionBar
를 사용하지 않는 테마를 사용해야 한다.
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- parent 속성을 사용하여 ActionBar를 사용하지 않는 테마를 상속받는다. -->
<style name="Theme.AndroidPractice" parent="Theme.MaterialComponents.DayNight.NoActionBar">
...
</resources>
Toolbar
는 뷰 컴포넌트이므로 레이아웃에 선언하여 개발자가 제어해야 한다.
액티비티에서 다음 세터를 사용하여 Toolbar
를 기존 ActionBar
대신 액션바로 사용할 수 있다.
AppCompatActivity.setSupportActionBar(toolbar: Toolbar?)
toolbar
가 액티비티의ActionBar
처럼 동작하도록 설정한다.
class ActionBarActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val binding = ActivityActionBarBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding.root)
// 바인딩 객체의 Toolbar를 ActionBar처럼 사용한다.
setSupportActionBar(binding.toolbar)
}
...
}
'Android' 카테고리의 다른 글
서비스 (2) : 바인딩된 서비스 (0) | 2022.08.28 |
---|---|
서비스 (1) : 포그라운드 및 백그라운드 서비스 (0) | 2022.08.27 |
알림 표시하기 (0) | 2022.07.26 |
진동 울리기 (0) | 2022.07.21 |
벨소리 재생하기 (0) | 2022.07.19 |