Android

액션 바 사용하기

까망사과 2022. 8. 9. 21:30

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 객체가 파라미터로 전달되는데, MenuInflatermenu 리소스를 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