AppBar
안드로이드는 AppBar는 ActionBar와 ToolBar를 사용할 수 있습니다.
보통 ActionBar를 사용했지만 Android 버전에 따라서 ActionBar가 다르게 동작한다는 점이 있습니다.
이에 비해, ToolBar는 수많은 종류의 기기에서 일관되게 작동할 수 있습니다.
ToolBar 사용하기
1. xml에 ToolBar를 추가해줍니다.
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@color/background_gray">
</androidx.appcompat.widget.Toolbar>
※ 기본 ActionBar는 사용하지 않게 합니다.
2. res에서 menu를 생성하고 파일을 추가해줍니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/location"
android:title="location"
android:icon="@drawable/baseline_location_on_24"
app:showAsAction="always"/>
<item
android:id="@+id/notification"
android:title="notification"
android:icon="@drawable/baseline_notifications_24"
app:showAsAction="always"/>
</menu>
3. MainActivity oncreate()에서 setSupportActionBar()로 앱바 지정해줍니다.
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
}
4. MainActivity에서 onCreateOptionMenu()로 메뉴의 내용을 앱바에 적용합니다.
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.app_menu, menu)
return true
}
5. MainActivity에서 onOptionItemSelected() 메서드를 호출하여 클릭 이벤트를 처리할 수 있습니다.
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.location -> {
Toast.makeText(this, "location", Toast.LENGTH_SHORT).show()
true
}
R.id.notification -> {
Toast.makeText(this, "notification", Toast.LENGTH_SHORT).show()
true
}
else -> {
super.onOptionsItemSelected(item)
}
}
'AndroidStudio' 카테고리의 다른 글
[Android] MVC 패턴 (Model - View - Controller) (0) | 2023.08.25 |
---|---|
[Android] Activity와 Fragment (0) | 2023.04.26 |