Android

[Android] Toolbar

배현진 2023. 4. 30. 15:27

안드로이드 기본 툴바 커스텀하는 방법을 알아본다.

 

[ Android Studio - Java ]


1. 기본 ActionBar 사용하지 않게 만들기

    /res/values/themes/themes.xml 들어가서 DarkActionBar -> NoActionBar로 변경

 

2. menu 폴더에 toolbar.xml 파일 만들기

    menu 폴더가 없으면 res 폴더에 우클릭 New -> Android Resource Directory -> Resource type에 menu 설정

    /res/menu/toolbar_menu.xml

<?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/action_search"
        android:title="검색"
        android:icon="@drawable/ic_baseline_search_24"
        android:layout_centerHorizontal="true"
        app:showAsAction="ifRoom" />

    <item
        android:id="@+id/action_settings"
        android:title="설정"
        android:icon="@drawable/ic_baseline_settings_24"
        android:layout_centerHorizontal="true"
        app:showAsAction="always" />

</menu>

+) showAsAction은 아이템 표시 상태를 의미

    always -> 항상 표시 

    ifRoom -> 공간이 있을 경우 표시

 

3. layout xml 파일에 Toolbar위젯 추가하기

<androidx.appcompat.widget.Toolbar

        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ToolbarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:text="@string/app_name">
        
    </androidx.appcompat.widget.Toolbar>

 

4. 해당 activity에서 구현

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_main);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar_menu, menu);
        return true;
        }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_search:
                startActivity(new Intent(this, ___Activity.class));
                return true;
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

+) onCreate 안에서 제작한 toolbar를 액티비티의 appbar로 지정해준다.

    onCreateOptionsMenu로 menu resource 파일의 내용을 appbar에 반영해준다.

        -> 커스텀 한 모습대로 구현 완료

    onOptionsItemSelected로 해당 toolbar에 존재하는 이벤트 구현해준다.

 

5. 툴바에 뒤로가기 버튼 만들기

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar); //액티비티의 앱바(App Bar)로 지정
        ActionBar actionBar = getSupportActionBar(); //앱바 제어를 위해 툴바 액세스
        actionBar.setDisplayHomeAsUpEnabled (true); // 앱바에 뒤로가기 버튼 만들기
    }