프로그래밍/안드로이드

안드로이드 - 버튼에 팝업메뉴 만들기

가카리 2015. 8. 2. 18:28
반응형

팝업메뉴는 컨텍스트 메뉴와 용도가 동일하지만 약간 더 업그레이드된 버전이라고


생각하시면 되겠습니다.


먼저 생성자는 다음과 같다.


PopupMenu(Context context, View anchor)


두번째 인수는 팝업 메뉴를 표시할 앵커 뷰를 지정함. 앵커 뷰 아래에 팝업 메뉴가 나타난다.


메뉴와 메뉴 전개자는 다음 메소드를 사용한다


Menu getMenu()

MenuInflater getMenuInflater()


Menu의 add 메소드로 빈 메뉴에 항목을 추가 할 수도 있고 이전에 해본 방법인 XML로 메뉴를 정의하고 전개자의 inflater 메소드로 메뉴를 만들 수 있다.


void show()

void dismiss()


위 두 메소드는 메뉴를 보이거나 숨긴다.


void setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener)

void setOnDismissListener(PopupMenu.OnDismissListener listener)


위 메소드는 메뉴 항목을 선택하거나 사라질때 이벤트를 처리하기 위한 이벤트 리스터 등록 메소드이다.


boolean onMenuItemClick(MenuItem item)


팝업 메뉴를 선택했을때 리스너의 다음 메서드가 호출된다. 인수인 item은 메뉴의 각 항목을 의미한다.




다음은 예제이다.


메뉴를 XML로 정의하기 위한 popupmenu.xml파일


<menu xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    tools:context="com.example.ch9_popup_menu.Popupmenu" >

        

    <item android:id="@+id/popup_red"

        android:title="Back-Red"/>

    <item android:id="@+id/popup_green"

        android:title="Back-Green"/>

        <item android:id="@+id/popup_blue"

        android:title="Back-Blue"/>

        <item android:id="@+id/popup_text"

            android:title="TextColor">

       <menu>

           <item android:id="@+id/popup_black"

               android:title="Text-Black"/>

           <item android:id="@+id/popup_white"

               android:title="Text-White"/>

           <item android:id="@+id/popup_gray"

               android:title="Text-Gray"/>

       </menu>

        </item>

</menu>




기본적인 레이아웃을 위한 activity_popupmenu.xml 파일


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

       android:orientation="vertical"

       android:layout_width="match_parent"

       android:layout_height="match_parent"

       >

       

    

       <Button

           android:id="@+id/btn"

           android:layout_width="match_parent"

           android:layout_height="wrap_content"

           android:onClick="mOnClick"

           android:text="Button"

           />

    

</LinearLayout>



Popupmenu.java 파일입니다.

package com.example.ch9_popup_menu;


import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.PopupMenu;


public class Popupmenu extends Activity {


        Button mBtn;

        

        @Override

        protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_popupmenu);

        

        //버튼 등록

        mBtn = (Button)findViewById(R.id.btn);

        

        }

        

        //버튼이 눌렸을때 여기로옴

        public void mOnClick(View v){

        //팝업 메뉴 객체 만듬

        PopupMenu popup = new PopupMenu(this, v);

        

        //xml파일에 메뉴 정의한것을 가져오기위해서 전개자 선언

        MenuInflater inflater = popup.getMenuInflater();

        Menu menu = popup.getMenu();

        

        //실제 메뉴 정의한것을 가져오는 부분 menu 객체에 넣어줌

        inflater.inflate(R.menu.popupmenu, menu);

        

        //메뉴가 클릭했을때 처리하는 부분

        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

        

        @Override

        public boolean onMenuItemClick(MenuItem item) {

        // TODO Auto-generated method stub

        

        // 메뉴별 아이디를 조사한후 할일을 적어줌

        switch(item.getItemId()){

        case R.id.popup_red:

        mBtn.setBackgroundColor(Color.RED);

        break;

        case R.id.popup_green:

        mBtn.setBackgroundColor(Color.GREEN);

        break;

        case R.id.popup_blue:

        mBtn.setBackgroundColor(Color.BLUE);

        break;

        case R.id.popup_black:

        mBtn.setTextColor(Color.BLACK);

        break;

        case R.id.popup_white:

        mBtn.setTextColor(Color.WHITE);

        break;

        case R.id.popup_gray:

        mBtn.setTextColor(Color.GRAY);

        break; 

        }

        

        return false;

        }

        });

        

        popup.show();

        }


}

















실제 실행 화면입니다.



아래를 팝업 메뉴를 띄웠을때 입니다. 위치가 버튼 아래에서 생성되네요



버튼을 빨간색으로 바꿔보았습니다.



텍스트를 그레이 색상으로 바꿔보았습니다.










반응형