Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[41일차 Android] ToolBar 본문

Computer/Android

[41일차 Android] ToolBar

Wise-99 2023. 7. 1. 21:13

 

 

 

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

 

 

 

📖 ToolBar

  • 안드로이드에서 ActionBar를 보다 자유롭게 사용할 수 있도록 Toolbar라는 View를 제공하고 있다.
  • Toolbar를 이용해 탭 등 다양한 기능을 이용할 수 있도록 제공하고 있으며 기본적인 부분은 ActionBar와 동일하다.

 

 

예제 코드

menu/main_menu.xml

<?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:icon="@android:drawable/ic_menu_add"
        android:title="메뉴1"
        app:showAsAction="always" />
    <item
        android:id="@+id/item2"
        android:icon="@android:drawable/ic_menu_search"
        android:title="메뉴2"
        app:showAsAction="always" />
</menu>

 

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SecondActivity 실행" />
</LinearLayout>

 

 

 

activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SecondActivity"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>

 

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

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

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

        activityMainBinding.run {
            toolbar.run {
                // 타이틀
                title = "ToolBar"
                // 타이틀 글자 색상
                setTitleTextColor(Color.WHITE)
                // 옵션 메뉴를 구성
                inflateMenu(R.menu.main_menu)
                
                // 상단 메뉴를 눌러주면 동작하는 리스너
                setOnMenuItemClickListener {
                    // 사용자가 누른 메뉴의 id로 분기한다.
                    when(it?.itemId){
                        R.id.item1 -> {
                            textView.text = "메뉴1을 눌렀습니다."
                        }
                        R.id.item2 -> {
                            textView.text = "메뉴2를 눌렀습니다."
                        }
                    }
                    false
                }
            }
			
            // Activity 이동
            button.setOnClickListener {
                val newIntent = Intent(this@MainActivity, SecondActivity::class.java)
                startActivity(newIntent)
            }
        }
    }
}
  • ToolBar는 setOnMenuItemClickListener를 이용하여 메뉴 선택 시의 기능을 정의한다.
    • ActionBar는 onOptionsItemSelected 함수를 이용하여 메뉴 선택 시의 기능을 정의한다.

 

 

 

SecondActivity.kt

class SecondActivity : AppCompatActivity() {

    lateinit var activitySecondBinding: ActivitySecondBinding

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

        activitySecondBinding = ActivitySecondBinding.inflate(layoutInflater)
        setContentView(activitySecondBinding.root)

        activitySecondBinding.run {
            toolbar2.run {
                title = "SecondActivity"
                setTitleTextColor(Color.WHITE)
                
                // back버튼 아이콘 표시
                setNavigationIcon(androidx.appcompat.R.drawable.abc_ic_ab_back_material)

                // back버튼 아이콘 색상 변경
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
                    navigationIcon?.colorFilter = BlendModeColorFilter(Color.WHITE, BlendMode.SRC_ATOP)
                } else {
                    navigationIcon?.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)
                }
                // back버튼 리스너
                setNavigationOnClickListener {
                    finish()
                }
            }
        }
    }
}
  • ToolBar는 setNavigationIcon()을 이용하여 버튼을 생성한다.
    • ActionBar는 supportActionBar?.setHomeButtonEnabled(true)를 이용하여 버튼을 생성한다.

 

  • ToolBar는 setNavigationOnClickListener를 이용하여 버튼의 기능을 정의한다.
    • ActionBar는 onOptionsItemSelected 함수를 이용하여 버튼의 기능을 정의한다.

 

 

 

결과

'Computer > Android' 카테고리의 다른 글

[41일차 Android] ViewPager2  (0) 2023.07.01
[41일차 Android] Fragment에서의 ToolBar 사용  (0) 2023.07.01
[41일차 Android] ActionBar Navigation  (0) 2023.07.01
[41일차 Android] ActionView  (0) 2023.07.01
[41일차 Android] ActionBar  (0) 2023.07.01