본문 바로가기
코딩일기/android studio

안드로이드 독학 16일차 : 팝업 메뉴(PopupMenu)

by 욱파이어니어 2021. 3. 31.
728x90
반응형

팝업 메뉴는 안드로이드에서 특정 뷰를 클릭했을 때 메뉴가 해당 뷰 아래 혹은 위에 나타나는 것이다.

아래에 나타나는 경우는 아래에 공간이 있을 때고 공간이 없다면 위에 나타난다.

 

그럼 예제를 통해서 확인해보자.

 

xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/pop1"
        android:title="팝업1"/>
    <item
        android:id="@+id/pop2"
        android:title="팝업2"/>
    <item
        android:id="@+id/pop3"
        android:title="팝업3"/>
</menu>

이렇게 xml을 설정해서 메뉴를 만들었다.

그리고 메인 레이아웃은 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/pop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="팝업"
        android:textSize="50dp"
        android:layout_gravity="center"
        android:onClick="popClick"/>
</LinearLayout>

안에 버튼을 만들었고 버튼 클릭했을 때 popClick 메소드를 호출하게 했다.

 

실행 화면 

 

자그럼 이제 자바 소스를 확인해보자 자세한 내용은 주석으로 설명해놨으린 확인 해보면 될 것 같다.

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

    public void popClick(View view) {
        //PopupMenu 객체를 만들어 줘야하는대 해당 객체를 생성할때 인자론 context가 필요해서 Onclick 메소드를 xml에서 포함해줘야하고
        //또다른 매개변수로는 View를 받기 때문에 view로 설정을 해준다.
        //아래에서 this는 해당 Activity를 뜻한다.
        PopupMenu popM = new PopupMenu(this,view);
        //다른 메뉴들과 마찬가지로 inflate 시켜준다.
        popM.getMenuInflater().inflate(R.menu.popup_menu,popM.getMenu());
        //자바소스로 popM.getMenu()를 해서 메뉴를 가져오고 거기에 .add()를 해줘서 메뉴 추가
        popM.getMenu().add(0,4,3,"팝업4");
        //해당 메뉴가 클릭이 됐을때 나타내 주는것
        popM.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.pop1:
                        Toast.makeText(getApplicationContext(),"이건 팝업1",Toast.LENGTH_SHORT).show();
                        return true;
                    case R.id.pop2:
                        Toast.makeText(getApplicationContext(),"이건 팝업2",Toast.LENGTH_SHORT).show();
                        return true;
                    case R.id.pop3:
                        Toast.makeText(getApplicationContext(),"이건 팝업3",Toast.LENGTH_SHORT).show();
                        return true;
                    case 4:
                        Toast.makeText(getApplicationContext(),"이건 팝업4",Toast.LENGTH_SHORT).show();
                        return true;
                    default:
                        return false;
                }
            }
        });
        popM.show(); //이걸 해야지만 팝업이 보여진다.
    }
}

 

반응형