SW 공부노트

[안드로이드/자바] Custom Toolbar에 메뉴기능 추가하기 본문

안드로이드/안드로이드 실습

[안드로이드/자바] Custom Toolbar에 메뉴기능 추가하기

요빈 2022. 7. 21. 14:59

이전 글에서는 기본 Toolbar를 커스텀하는 방법에 대해 작성하였다.

https://yobinmoksw.tistory.com/5

 

[안드로이드 스튜디오 - 자바] 기본 Toolbar Custom하기

안드로이드 화면을 구성하다보면 기본으로 세팅되어 있는 상단바를 필요에 맞게 변경해야하는 경우가 발생한다. 이럴 때는 기본으로 세팅된 Toolbar를 사용자가 원하는 형식으로 커스텀한 후 따

yobinmoksw.tistory.com

하지만 별다른 기능을 추가하지 않아 기존 툴바와 기능적으로 다른 부분은 없으나

툴바 커스텀의 가장 기본이자 시작 단계이므로 따로 나눠서 작성하였다.

 

이번 글에서는 커스텀 툴바에 원하는 버튼 기능을 추가하는 방법에 대해 작성하였다. 

이전 글과 이어지니 위에 첨부된 글을 참고하길 바란다.


1. menu 리소스 폴더, layout 파일 생성

기존 툴바를 커스텀하는 가장 큰 이유 중 하나는 툴바에 기능이 있는 버튼을 추가하기 위함일 것이다.

툴바에 원하는 버튼 기능을 삽입하기 위해서는 첫 번째로 menu resource type을 갖는 resource 폴더를 생성해야 한다. 

res 폴더에서 마우스 우측 버튼을 누른 후 [New] - [Android Resource Directory]를 클릭한 후 resource type을 menu로 지정해 폴더를 생성한다. 

 

메뉴 폴더를 생성한 뒤 커스텀 툴바에 추가할 메뉴를 지정하기 위한 layout 파일을 생성한다. 

res 폴더에서 마우스 우측 버튼을 누른 후 [New] - [Menu Resource File]을 누르면 파일이 생성된다.

원하는 기능에 맞게 버튼 item을 추가해주면 되고 아래 예시에는 add와 edit 버튼을 추가해놓았다. 

<?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 추가-->
    <item
        android:id="@+id/menu_add"
        android:icon="@drawable/ic_add"
        android:title="add"
        app:showAsAction="always"/>
     <item
        android:id="@+id/menu_edit"
        android:icon="@drawable/ic_edit"
        android:title="edit"
        app:showAsAction="always"/>

</menu>

menu/menu_add.xml

 

버튼 아이템에 맞게 아이콘, 제목을 지정해주었고 showAsAction 속성을 "Always"로 지정해 항상 표시되도록 하였다.

 

2. Activity 파일 작업하기

원하는 메뉴버튼을 추가했으면 이를 커스텀 툴바에 적용시켜야 한다. 

public class MainActivity extends AppCompatActivity {
   
    Toolbar toolbar;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.menu_add, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId())
        {
            case R.id.menu_add:
            	Toast.makeText(MainActivity.this, "ADD", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.menu_edit:
            	Toast.makeText(MainActivity.this, "EDIT", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

MainActivity.java

 

1) onCreateOptionsMenu 메소드

 

menu 리소스 폴더에 생성해 두었던 커스텀 툴바 layout을 inflate 시켜 메뉴 아이템을 툴바에 적용시킨다.

내부 메소드이므로 @Override 속성을 추가해줘야 한다. 

 

2) onOptionsItemSelected 메소드

 

해당 메소드를 통해 버튼을 클릭했을 경우 어떻게 실행할지 지정해준다. 

어떤 MenuItem이 선택되었는지 id값을 통해 구분하고 아이템에 따라 토스트 메시지를 출력하도록 작성하였다.

 

다음은 버튼 추가 후 실행한 화면이다.

 

add 버튼 클릭

메뉴 아이템을 2개 이상 추가했을 경우 입력한 순서대로 오른쪽 상단에 위치한다.

 

* 개인적으로 공부하며 배운 부분을 정리한 글이므로 설명이 잘못되거나 불필요한 코드가 있을 수 있습니다.