팝업 메뉴(Popup Menu)는 일반 메뉴와 비슷하지만, 액티비티의 남은 공간에 따라 해당 뷰의 위쪽 또는 아래쪽에 자동으로 표시되는 UI 요소입니다. 이 글에서는 안드로이드에서 팝업 메뉴를 손쉽게 구현하는 방법을 단계별로 알아보겠습니다.
1단계: 새 프로젝트 생성
안드로이드 스튜디오를 실행한 후 File → New Project를 선택하고, 프로젝트 생성에 필요한 정보를 모두 입력하여 새 프로젝트를 만듭니다.
2단계: 레이아웃 작성 (res/layout/activity_main.xml)
아래 코드를 res/layout/activity_main.xml 파일에 추가합니다.
<?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:id = "@+id/rootview"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
android:background = "#c1c1c1"
android:gravity = "center_horizontal"
tools:context = ".MainActivity">
<Button
android:id = "@+id/popup"
android:text = "Download"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
</LinearLayout>위 코드에는 버튼 하나가 배치되어 있습니다. 이 버튼을 클릭하면 팝업 메뉴가 화면에 나타나도록 구성할 것입니다.
3단계: MainActivity.java 코드 작성
다음 코드를 src/MainActivity.java 파일에 추가합니다.
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button popupButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
popupButton = findViewById(R.id.popup);
popupButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupMenuExample();
}
});
}
private void popupMenuExample() {
PopupMenu p = new PopupMenu(MainActivity.this, popupButton);
p.getMenuInflater().inflate(R.menu.popup_menu_example, p.getMenu());
p.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
});
p.show();
}
}핵심 코드 설명
버튼을 클릭하면 PopupMenu 객체가 생성되고, 메뉴 리소스가 이 객체에 등록(inflate)됩니다.
PopupMenu p = new PopupMenu(MainActivity.this, popupButton); p.getMenuInflater().inflate(R.menu.popup_menu_example, p.getMenu());
여기서 사용된 popup_menu_example 메뉴 리소스는 다음과 같습니다.
<?xml version = "1.0" encoding = "utf-8"?>
<menu xmlns:android = "https://schemas.android.com/apk/res/android">
<item
android:id = "@+id/android"
android:title = "Android" />
<item
android:id = "@+id/java"
android:title = "JAVA"/>
<item
android:id = "@+id/kotlin"
android:title = "Kotlin"/>
</menu>사용자가 메뉴 항목을 클릭하면 onMenuItemClickListener()가 호출되어 클릭 이벤트를 처리합니다.
p.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
});마지막으로 show() 메서드를 호출해야 팝업 메뉴가 실제로 화면에 표시됩니다.
p.show();
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. 안드로이드 스튜디오에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 실행 옵션에서 자신의 모바일 기기를 선택하세요. 그러면 기기에 다음과 같은 기본 화면이 표시됩니다.

Download 버튼을 클릭하면 팝업 메뉴가 나타납니다. 버튼 위쪽에 공간이 부족하기 때문에 메뉴는 아래쪽에 표시됩니다.

메뉴 항목 중 하나를 클릭하면 해당 항목의 제목이 토스트(Toast) 메시지로 표시됩니다.
