๋ชฉ์ฐจ
๋ค์ด๊ฐ๊ธฐ ์ ์
๋ฉ์ธ ํ๋ฉด์์ ์ฑ๋ฐ์ ์ฑ ๋ก๊ณ ์ ๊ฒ์, ์๋ฆผ ์์ด์ฝ์ ์ ๊ณตํ๊ณ ์๋ค. ๋๋ xml ํ์ผ์์ Toolbar ์์ ฏ ์ถ๊ฐ๋ฅผ ํตํด UI์์ ์ฑ๋ฐ๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์ด๋ ๊ฒ๋ง ํ๋ฉด ์ฑ๋ฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ผ๋ ์๋์๋ค! ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํ๊ณ ๊ทธ ๊ณผ์ ์ ์ ๋ฆฌํด์ ์ฑ๋ฐ ์ฌ์ฉ๋ฒ์ ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค.
์ฑ ๋ฐ๋?
์ฑ๋ฐ๋ ์์ ๋ชจ์์ด๋ผ๊ณ ๋ ํ๋ค ์ฑ๋ฐ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ๋ค!
1๏ธโฃ์ฑ์ ID๋ฅผ ์ง์ ํ๊ณ ์ฑ์์ ์์ฉ์์ ์์น๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ์ ์ฉ ๊ณต๊ฐ
2๏ธโฃ๊ฒ์๊ณผ ๊ฐ์ ์ค์ํ ์์ ์ ๋ํ ์์ธก ๊ฐ๋ฅํ ์ก์ธ์ค
3๏ธโฃํญ ๋๋ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ ํ์ ๋ฐ ๋ทฐ ์ ํ์ ์ง์
Toolbar ์์ ฏ์ ํตํด ์ฑ ๋ฐ ์ค์ ํ๊ธฐ
1๏ธโฃ์ฑ ๋ฐ๋ฅผ ์ฌ์ฉํ๋ ํ๋์ด AppCompatActivity๋ฅผ ํ์ฅํ๋๋ก ํ๋ค.
class MainPageActivity :
AppCompatActivity() {
2๏ธโฃ์ฑ์์ NoActionBar ํ ๋ง ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ค์ ํด์ค๋ค.
- ์ด๋ฅผ ํตํด ์ฑ์์ ๋ค์ดํฐ๋ธ ActionBar ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ ๋ฐ๋ฅผ ์ ๊ณตํ ์ ์๊ฒ ๋๋ค.
<style name="Theme" parent="Theme.Material3.DayNight.NoActionBar" />
3๏ธโฃํ๋์ ๋ ์ด์์์ Toolbar๋ฅผ ์ถ๊ฐํด์ค๋ค.
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/tool_bar"
style="@style/Widget.Material3.ActionBar.Solid"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
app:layout_constraintBottom_toTopOf="@+id/tabLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:menu="@menu/top_app_bar" />
4๏ธโฃ์ด๋ ๊ฒ ๋ง๋ ํด๋ฐ๋ฅผ ํ๋์ ์ฑ ๋ฐ๋ก ์ค์ ํด์ค๋ค!
์ฌ๊ธฐ์๋ถํฐ๊ฐ ๋ด๊ฐ ์ ๋๋ก ์ค์ ํด์ฃผ์ง ์์๋ ๋ถ๋ถ์ด๋ค ์ง์ค!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainPageBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolBar)
ํ๋์ onCreate ๋ฉ์๋์์ setSupportActionBar( )๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ํ๋์ ํด๋ฐ๋ฅผ ์ ๋ฌํด์ฃผ์๋ค.
์ด ๋ ๋ทฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ค.
์ด์ ์ฑ์ ๊ธฐ๋ณธ ์์ ๋ชจ์ ์ฆ ์ฑ๋ฐ๊ฐ ์ค์ ๋์๋ค.
์ฑ ๋ฐ์ ์์ ์ถ๊ฐ ๋ฐ ์ฒ๋ฆฌํด์ฃผ๊ธฐ
์ฑ ๋ฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์์ ์ ๋ฒํผ์ ์ถ๊ฐํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ ๋ง๋ ์ด๋ฒคํธ๋ฅผ ๊ตฌํํด์ค ์ ์๋ค.
1๏ธโฃ ์์
๋ฒํผ ์ถ๊ฐํ๊ธฐ
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/notification"
android:icon="@drawable/ic_notification"
app:showAsAction="always"
android:title="notification" />
<item
android:id="@+id/search"
android:icon="@drawable/ic_search"
app:showAsAction="always"
android:title="search" />
</menu>
์์
๋ฒํผ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐํ ํญ๋ชฉ๋ค์ menu ๋ฆฌ์์ค์์ ์ ์๋๋ค. ์์
๋ชจ์์ ์์
์ ์ถ๊ฐํ๋ ค๋ฉด res/menu/ ๋๋ ํฐ๋ฆฌ์ ์๋ก์ด xml ํ์ผ์ ๋ง๋ค์ด์ค๋ค.
showAsAction ์์ฑ
showAsAction ์์ฑ์ ํตํด ์์ ์ ์ฑ ๋ฐ์ ๋ฒํผ์ผ๋ก ํ์ํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ ์ ์๋ค.
- ifRoom : ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋ฒํผ์ผ๋ก ํ์, ๊ณต๊ฐ์ด ์์ผ๋ฉด ๋๋ณด๊ธฐ ๋ฉ๋ด๋ก ์ ์ก
- never: ํญ์ ๋๋ณด๊ธฐ ๋ฉ๋ด์ ํ์
2๏ธโฃonCreateOptionsMenu ์ฌ์ ์ํด์ฃผ๊ธฐ
์ด ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ค์ผ ์ฑ ๋ฐ์ ์์ ์ด ์ ์์ ์ผ๋ก ๋ณด์๋ค.
์์ฑํด์ฃผ์ง ์์ผ๋ฉด ์ฑ ๋ก๊ณ ๋ง ๋ณด์ธ๋ค.
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.top_app_bar, menu)
return true
}
์์ ์ ์๋ต : ๊ฒ์ ์์ด์ฝ ํด๋ฆญ ์ ๊ฒ์ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๊ธฐ !
์ฌ์ฉ์๊ฐ ์ฑ ๋ฐ ํญ๋ชฉ ์ค ํ๋๋ฅผ ์ ํํ๋ฉด ์์คํ ์ ํ๋์ onOptionsItemSelected( ) ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ menuItem ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ํญํ ํญ๋ชฉ์ ๋ํ๋ธ๋ค.
override fun onOptionsItemSelected(item: MenuItem) =
when (item.itemId) {
R.id.search -> {
val intent = Intent(this, SearchActivity::class.java)
startActivity(intent)
true
}
R.id.notification -> {
true
}
else -> {
super.onOptionsItemSelected(item)
false
}
}
MenuItem.getItemId() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๋ค ํญ๋ชฉ์ ํญํ๋์ง ํ์ธํ๋ค. ๋ฐํ๋ id๋ ๋์ํ๋ <item> ์์์ android:id ์์ฑ์ ์ ์ธํ ๊ฐ๊ณผ ์ผ์นํ๋ค. ๋ฐ๋ผ์ ์์ ์ฝ๋์ฒ๋ผ when(item.itemId) ๋ฅผ ํตํด์ ์ด๋ค item์ด ํญ๋์๋์ง๋ฅผ ํ์ธํ๊ณ ๊ฐ item์ ๋ง๋ ์์ ์ ์ํํ ์ ์๋ค.
๋ง์ง๋ง else๋ฌธ์์ ์ฌ์ฉ์์ ์์ ์ ์ธ์ํ์ง ๋ชปํ๋ฉด ์ํผ ํด๋์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
๐คsetOnMenuItemClickListener์ onOptionsItemSelected์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๋ฒํผ์ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ํด ๊ฒ์ํ๋ ์ค ์์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์๋ค. ์ ๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๋ ๋ฌด์์ธ์ง ์์๋ณด์
setOnMenuItemClickListener
๋ฉ๋ด ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค. ์ฝ๋๋ฅผ ๋ฐ๋ก ์ดํด๋ณด์
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.top_app_bar, menu)
val menuItem = menu?.findItem(R.id.search)
menuItem?.setOnMenuItemClickListener {
val intent = Intent(this, SearchActivity::class.java)
startActivity(intent)
true
}
return true
}
์ด๋ ๊ฒ onCreateOptionsMenu ๋ด๋ถ์ Menu ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์์ ์ ์ํํ ์ ์์๋ค!
onOptionsItemSelected ๋ฉ์๋
override fun onOptionsItemSelected(item: MenuItem) =
when (item.itemId) {
R.id.search -> {
val intent = Intent(this, SearchActivity::class.java)
startActivity(intent)
true
}
R.id.notification -> {
val intent = Intent(this, NotificationActivity::class.java)
startActivity(intent)
true
}
else -> {
super.onOptionsItemSelected(item)
}
}
์ด ๋ ๋ก์ง์ search ์์ด์ฝ์ ๋ํด์ ๊ฐ์ ๋์์ ์ํํ๋ค!
๋๋ ๋ก์ง์ ๋ถ๋ฆฌํด์ฃผ๊ณ ์ onOptionsItemSelected๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ๊ตฌํํด์ฃผ์๋ค.
'๐ค2024 ์๋๋ก์ด๋ > ๐ฟ ์ํ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android recyclerview ์ดํดํ๊ธฐ!!! (0) | 2024.04.29 |
---|---|
๐ฃ๋ฉ์ธ ํ๋ฉด API ์ฐ๋ ์ข์ถฉ์ฐ๋๊ธฐ ๊ธฐ๋ก (2) | 2024.04.08 |
๊ฒ์ ํ๋ฉด ๊ตฌํ ๊ณผ์ ์ ๋ฆฌ (0) | 2024.04.07 |
๐จ๋ฉ์ธ ํ๋ฉด UI ๊ตฌํ ๊ณผ์ ๊ณผ ์ง๋ฌธ ๊ธฐ๋ก (0) | 2024.04.05 |
Android : ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ์ ๋ฆฌ (0) | 2024.03.27 |