Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android ActionBar에서 메뉴 항목 숨기고 표시하기 – 단계별 완벽 가이드

이 튜토리얼에서는 Android ActionBar에서 메뉴 항목을 동적으로 숨기거나 다시 표시하는 방법을 단계별로 알아보겠습니다. 화면의 토글 버튼 상태에 따라 공유(Share) 메뉴 아이콘이 나타나거나 사라지는 실용적인 예제를 함께 만들어 보겠습니다.

핵심 개념 이해하기

ActionBar의 메뉴 항목을 제어하려면 MenuItem 객체의 setVisible()setEnabled() 메서드를 사용합니다. 메뉴는 onCreateOptionsMenu() 콜백에서 인플레이트되며, 이 시점에 Menu 객체를 멤버 변수로 저장해두면 앱 실행 중 언제든지 특정 메뉴 항목에 접근하여 가시성을 변경할 수 있습니다.

1단계: 새 프로젝트 생성

Android Studio를 열고 File → New Project를 선택한 후, 새 프로젝트 생성에 필요한 모든 세부 정보를 입력하여 빈 프로젝트를 만듭니다.

2단계: 레이아웃 파일 작성 (activity_main.xml)

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면 중앙에 메뉴 표시 여부를 전환할 ToggleButton 하나를 배치합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">
    <ToggleButton
        android:id="@+id/btnMenuItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

3단계: MainActivity.java 구현

src/MainActivity.java에 아래 코드를 작성합니다. 핵심은 onCreateOptionsMenu()에서 Menu 객체를 저장해두고, 토글 버튼의 체크 상태가 바뀔 때마다 findItem()으로 공유 메뉴 항목을 찾아 setVisible()setEnabled()를 호출하는 부분입니다.

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.CompoundButton;
import android.widget.ToggleButton;
public class MainActivity extends AppCompatActivity {
    ToggleButton button1;
    Menu myMenu;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.btnMenuItem);
        button1.setOnCheckedChangeListener(onCheckedChangeListener);
    }
    CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
        boolean isChecked) {
            if(myMenu != null) {
                if (buttonView == button1) {
                    myMenu.findItem(R.id.menu_action_share).setVisible(isChecked);
                    myMenu.findItem(R.id.menu_action_share).setEnabled(isChecked);
                }
            }
        }
    };
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menuitem, menu);
        myMenu = menu;
        MenuItem item = menu.findItem(R.id.menu_action_share);
        if (item != null) {
            item.setVisible(true);
        }
    return true;
    }
}

4단계: 메뉴 리소스 파일 생성 (menuitem.xml)

res 폴더를 마우스 오른쪽 버튼으로 클릭하여 menu 폴더를 생성합니다. 그다음 menu 폴더를 오른쪽 클릭해 메뉴 리소스 파일(menuitem.xml)을 만들고 아래 코드를 추가합니다. 여기서 정의한 공유 아이콘 메뉴가 ActionBar에 표시됩니다.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_action_share"
        android:icon="@drawable/ic_share_black_24dp"
        android:title="Share"
        app:showAsAction="ifRoom"/>
</menu>

5단계: AndroidManifest.xml 설정

androidManifest.xml에 아래 코드를 추가합니다. 일반적인 기본 설정으로, MainActivity가 런처 액티비티로 등록되어 있는지 확인하면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 스마트폰을 컴퓨터에 연결했다고 가정하고 진행합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 목록에서 자신의 모바일 기기를 선택하면 앱이 설치되어 실행됩니다.

앱이 실행되면 기본 화면이 표시됩니다. 토글 버튼을 켜면 ActionBar에 공유 아이콘이 나타나고, 끄면 아이콘이 사라지는 것을 확인할 수 있습니다.

Android ActionBar에서 메뉴 항목 숨기고 표시하기 – 단계별 완벽 가이드

Android ActionBar에서 메뉴 항목 숨기고 표시하기 – 단계별 완벽 가이드

마무리 정리

지금까지 Android ActionBar에서 메뉴 항목을 동적으로 숨기고 표시하는 방법을 살펴보았습니다. 핵심 포인트를 요약하면 다음과 같습니다.

- onCreateOptionsMenu()에서 Menu 객체를 멤버 변수로 저장한다.
- menu.findItem(R.id.메뉴ID)로 원하는 메뉴 항목을 가져온다.
- setVisible(boolean)으로 가시성을, setEnabled(boolean)으로 활성화 상태를 제어한다.
- UI 상태 변화(예: 토글 버튼)에 따라 위 메서드를 호출하면 된다.

이 패턴은 로그인 상태에 따라 특정 메뉴를 보여주거나, 조건부로 기능을 활성화하는 등 다양한 실무 시나리오에 응용할 수 있습니다.