구글에서 요즘에는 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 해서 만들기
<?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() 메서드를 오버라이드하는 예시입니다.
- menuInflater.inflate(R.menu.main_menu, menu) 라인은 menuInflater를 사용하여 main_menu라는 메뉴 리소스 파일을 menu 객체에 인플레이트(팽창)하는 역할을 합니다. 이렇게 하면 main_menu에 정의된 메뉴 항목들이 menu 객체에 추가됩니다.
- 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 |