[Android Studio] 앱바 만들기

노유성·2023년 4월 16일
0
post-thumbnail

테마 변경하기

res/values/themes/themes.xml 파일에서 정의하는 테마를 바꾸어주어야 한다.

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">"

라고 정의된 부분을

<style name="Theme.MakeButton" parent="Theme.AppCompat.Light.NoActionBar">

로 바꿔준다.

위 xml코드는 기본적으로 제공하는 테마를 상속받도록 하는 테마이고 우리는 새로운 앱바를 만들어서 적용할 것이기 떄문에 default값으로 지정된 테마를 제거해야한다.

📱Toolbar

MainActivity.xml에 툴바 추가하기

<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" />

메인 xml 파일의 레이아웃 안에 툴바를 만들어서 넣어준다.

디자인은 원하는 디자인으로 변경하면 된다.

activity_main.java에서 툴바 가져오기


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

		// 추가
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle(R.string.app_name);
        setSupportActionBar(toolbar);
    }

메인 xml파일에 정의된 레이아웃들을 setContentView()를 이용해서 낚아채오면 툴바의 id를 이용해 가져온다.

setTitle() method를 이용해서 툴바의 이름을 지정해주고
setSupportActionBar() method를 이용해서 툴바를 액션바로 지정한다.

Appbar에 메뉴 아이템 추가하기

먼저 res/ 아래에 menu 폴더를 만든 후에 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/search"
        android:icon="@drawable/baseline_east_24"
        android:title="Item"
        app:showAsAction="always" />
    <item
        android:id="@+id/option"
        android:icon="@mipmap/ic_launcher_round"
        android:title="Item"
        app:showAsAction="always" />
</menu>

예제로 두 개의 아이템을 만들었다.

참고로 menu 폴더에서 만드는 xml 파일들의 이름은 전부 소문자로 지정해야 한다고 한다. (왜인지는 모르겠다..)


📱Menu 설정하기

onCreateOptionMenu()

설명하기 전에 안스에서 on으로 시작하면은 이벤트를 처리하는 메소드로 알고있고 액티비티가 처음 시작하면 onCreate()가 자동적으로 실행되는 것처럼 onCreateOptionMenu()도 처음 액티비티가 실행되면 자동으로 실행된다.

@Override  
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menuitem, menu);

        return true;
    }

getMenuInflater()는 메뉴를 다루는 객체인 MenuInfalter 반환하는 메소드이다.

MenuInfalter 객체에 inflate() 메소드를 이용해서 res폴더에 미리 만들어놓은 menuitem.xml파일을 가져와서 inflate한다

inflate()란?

inflate는 안드로이드에서 XML 레이아웃 파일을 로드하고, 해당 레이아웃을 메모리에 객체로 생성하는 메서드입니다. 이 메서드를 사용하면 앱에서 XML 레이아웃 파일을 쉽게 로드하여 화면에 보여줄 수 있다.
inflate 메서드는 LayoutInflater 클래스에서 제공되며, LayoutInflater 객체의 inflate 메서드를 호출하여 사용한다.

onOptionsItemSelected()

onCreateOptionMenu()로 가져온 아이템들이 선택되었을 때에 어떤 action을 할 것인지를 정의한 method이다.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.search:
                Toast.makeText(getApplicationContext(), "Search Click", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.option:
                Toast.makeText(getApplicationContext(), "Option Click", Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

위 에제는 앞서 설정한 메뉴 버튼들이 클릭되었을 때 Toast 메세지를 출력하는 예제이다.

두 메소드 모두 원래 AppCompatActivity class에 정의되어 있는 method(더 정확히는 Activity class)이며 이를 overridding 해서 사용하는 것이다.

profile
풀스택개발자가되고싶습니다:)

0개의 댓글