본문 바로가기

android/Android Developers

1. App bar(앱바 추가, 액션 추가 및 핸들링, up 액션)

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