본문 바로가기

안드로이드 앱 스쿨 2기/Android

[10주차 - 수] ActionBar

구글에서 요즘에는 ActionBar 사용하지 말라고 권하고 있긴하지만, 회사에서는 아직도 쓰는데가 많을 수 있다.

그래서, 구글에서는 ActionBar 보다는 ToolBar 를 권장한다

 

1. res → value → themes → themes.xml 

 

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.Android57_ActionBar" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Customize your light theme here. -->
        <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>

    </style>

    <style name="Theme.Android57_ActionBar" parent="Base.Theme.Android57_ActionBar" />
</resources>
  • ActionBar 사용될 색상을 커스텀 하였다.
  • 요즘은 구글에서 ActionBar 사용을 권장하지 않고 있어서, 기본적으로 NoActionBar 로 액션바를 비활성화 시키고 있다
<style name="Base.Theme.Android57_ActionBar" parent="Theme.Material3.Dark.NoActionBar">
  • 그래서, ActionBar 를 활성화 시켜주어야 ActionBar 가 보이게된다

 

2. Main_menu 파일 만들기

  • res → New → Android Resouce File → Resource type: Menu 해서 만들기

menu 폴더가 생기게 됨

 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/item1"
        android:title="메뉴1"
        app:showAsAction="always" />
    <item
        android:id="@+id/item2"
        android:icon="@android:drawable/ic_menu_call"
        android:title="메뉴2"
        app:showAsAction="ifRoom|withText" />
    <item
        android:id="@+id/item3"
        android:icon="@android:drawable/ic_menu_always_landscape_portrait"
        android:title="메뉴3"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/item4"
        android:title="메뉴4"
        app:showAsAction="ifRoom" />
</menu>

 

  • showAsAction 의 종류
    • None : 기본. ActionBar에 표시하지 않는다.
    • Always : 무조건 ActionBar에 표시된다.
    • ifRoom : 공간이 허락할 경우 ActionBar에 표시된다.
    • Icon : ActionBar에 표시될 때 사용할 아이콘을 지정한다.
    • withText : 공간이 허락될 경우 아이콘과 함께 문자열을 표시한다.

 

3.MainActivity 

 

class MainActivity : AppCompatActivity() {
    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater);
        setContentView(activityMainBinding.root)

    }

    // 옵션메뉴 설정
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {

        menuInflater.inflate(R.menu.main_menu, menu)

        return super.onCreateOptionsMenu(menu)
    }

    // 옵션메뉴 클릭시
    override fun onOptionsItemSelected(item: MenuItem): Boolean {

        when (item.itemId) {
            R.id.item1 -> {
                activityMainBinding.textView.text = "메뉴1을 눌렀습니다"
            }

            R.id.item2 -> {
                activityMainBinding.textView.text = "메뉴2를 눌렀습니다"
            }

            R.id.item3 -> {
                activityMainBinding.textView.text = "메뉴3을 눌렀습니다"
            }

            R.id.item4 -> {
                activityMainBinding.textView.text = "메뉴4를 눌렀습니다"
            }
        }

        return super.onOptionsItemSelected(item)
    }

}

 


	// 옵션메뉴 설정
    override fun onCreateOptionsMenu(menu: Menu?): Boolean {

        menuInflater.inflate(R.menu.main_menu, menu)

        return super.onCreateOptionsMenu(menu)
    }

 

- 챗 GPT 설명

onCreateOptionsMenu()은 Android 액티비티에서 옵션 메뉴를 생성하는 메서드입니다. 이 메서드를 오버라이드하여 액티비티에 메뉴 항목을 추가하고, 해당 메뉴가 표시될 때 실행되는 동작을 정의할 수 있습니다.

위의 코드는 onCreateOptionsMenu() 메서드를 오버라이드하는 예시입니다.

  1. menuInflater.inflate(R.menu.main_menu, menu) 라인은 menuInflater를 사용하여 main_menu라는 메뉴 리소스 파일을 menu 객체에 인플레이트(팽창)하는 역할을 합니다. 이렇게 하면 main_menu에 정의된 메뉴 항목들이 menu 객체에 추가됩니다.
  2. return super.onCreateOptionsMenu(menu) 라인은 상위 클래스의 onCreateOptionsMenu() 메서드를 호출하여 추가적인 초기화 작업을 수행합니다. 이렇게 함으로써 메뉴가 올바르게 생성되고 화면에 표시될 수 있도록 도와줍니다.

액티비티에서 onCreateOptionsMenu()를 오버라이드하면, 해당 액티비티가 만들어질 때 옵션 메뉴가 생성되고, 사용자가 메뉴 버튼을 눌렀을 때 메뉴가 화면에 표시됩니다. 이후 사용자가 메뉴 항목을 선택하면 onOptionsItemSelected() 메서드가 호출되어 해당 메뉴 항목에 대한 동작을 처리할 수 있습니다.

 


[결과]

 

 


 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님

 

 

 

'안드로이드 앱 스쿨 2기 > Android' 카테고리의 다른 글

[10주차 - 수] AppBarLayout  (0) 2023.07.02
[10주차 - 수] ViewPager2  (0) 2023.07.02
[10주차 - 수] Toolbar  (0) 2023.07.02
[10주차 - 수] ActionBarNavigation  (0) 2023.07.02
[10주차 - 수] ActionView  (0) 2023.07.02