질문 정리

안드로이드 메뉴 만드는 법

five2week 2023. 3. 21. 02:33

최근에 시작한 간단한 메모 앱 프로젝트에서 메뉴 만들 일이 많아서 정리합니다.

 

안드로이드에서 메뉴를 만드는 방법은 주로 세 가지 유형이 있습니다. 컨텍스트 메뉴(Context Menu), 옵션 메뉴(Option Menu), 팝업 메뉴(Popup Menu). 이들 메뉴 유형의 주요 차이점은 다음과 같습니다.

컨텍스트 메뉴(Context Menu)
컨텍스트 메뉴는 특정 뷰에 대해 사용자가 길게 누르거나 뷰를 선택했을 때 나타나는 메뉴입니다.일반적으로 뷰와 관련된 작업을 수행하기 위해 사용됩니다.
onCreateContextMenu 및 onContextItemSelected 메서드를 사용하여 컨텍스트 메뉴를 만들고 처리할 수 있습니다.
컨텍스트 메뉴는 전체 애플리케이션에 대해 일관된 메뉴를 제공하지 않으며, 각 뷰에 대해 개별적으로 설정해야 합니다.

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, v.getId(), 0, "Action 1");
        menu.add(0, v.getId(), 0, "Action 2");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        if (item.getTitle().equals("Action 1")) {
            showToast(this, "Action 1 selected");
        } else if (item.getTitle().equals("Action 2")) {
            showToast(this, "Action 2 selected");
        } else {
            return false;
        }
        return true;
    }

 

옵션 메뉴(Option Menu)
옵션 메뉴는 액티비티의 액션바 또는 툴바에 표시되는 메뉴입니다. 전체 애플리케이션 또는 특정 액티비티에 대한 일반적인 작업을 수행하기 위해 사용됩니다.
onCreateOptionsMenu 및 onOptionsItemSelected 메서드를 사용하여 옵션 메뉴를 만들고 처리할 수 있습니다.
옵션 메뉴는 액티비티에 대해 일관된 메뉴를 제공하며, 필요한 경우 각 액티비티에서 메뉴를 재정의할 수 있습니다.

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_option1) {
            Toast.makeText(this, "Option 1 selected", Toast.LENGTH_SHORT).show();
            return true;
        } else if (id == R.id.action_option2) {
            Toast.makeText(this, "Option 2 selected", Toast.LENGTH_SHORT).show();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

 

팝업 메뉴(Popup Menu)
팝업 메뉴는 특정 뷰를 클릭하거나 뷰의 액션 버튼을 누를 때 나타나는 메뉴입니다. 팝업 메뉴는 일반적으로 해당 뷰와 관련된 추가 작업을 제공하기 위해 사용됩니다.
PopupMenu 클래스를 사용하여 팝업 메뉴를 만들고 처리할 수 있습니다.
팝업 메뉴는 뷰에 대해 일관된 메뉴를 제공하며, 필요한 경우 각 뷰에서 메뉴를 재정의할 수 있습니다.메뉴 유형은 서로 다른 목적과 사용 방법을 가지며, 상황에 맞게 적절한 메뉴 유형을 사용하여 사용자와의 상호 작용을 구현할 수 있습니다.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        binding.showPopupButton.setOnClickListener(v -> {
            PopupMenu popupMenu = new PopupMenu(MainActivity.this, binding.showPopupButton);
            popupMenu.getMenuInflater().inflate(R.menu.menu_main, popupMenu.getMenu());

            popupMenu.setOnMenuItemClickListener(item -> {
                int id = item.getItemId();

                if (id == R.id.action_option1) {
                    Toast.makeText(MainActivity.this, "Option 1 selected", Toast.LENGTH_SHORT).show();
                    return true;
                } else if (id == R.id.action_option2) {
                    Toast.makeText(MainActivity.this, "Option 2 selected", Toast.LENGTH_SHORT).show();
                    return true;
                }

                return false;
            });

            popupMenu.show();
        });
    }

 

참고 링크

https://developer.android.com/develop/ui/views/components/menus

 

Menus  |  Android Developers

Menus Stay organized with collections Save and categorize content based on your preferences. Menus are a common user interface component in many types of applications. To provide a familiar and consistent user experience, you should use the Menu APIs to pr

developer.android.com