Programmer:)

[AndroidStudio] MenuBox 만들기(PopupMenu) 본문

DEV/AndroidStudio

[AndroidStudio] MenuBox 만들기(PopupMenu)

ryeggg 2021. 1. 22. 00:36
반응형

1. res 폴더 안에 menu 폴더 없을 시 아래와 같이 menu폴더 생성

 

2. menu resourcefile 생성

 

3. menu_sounselorlist.xml : 메뉴박스에 넣을 item xml 작성 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/rendom"
        android:title="랜덤" />
    <item
        android:id="@+id/highestScore"
        android:title="신통지수 높은 순" />
    <item
        android:id="@+id/highestCase"
        android:title="상담건수 높은 순" />
</menu>

 

4. fragment or activity 소스에 코드 추가

 

<클릭 이벤트 리스너>

 

<메뉴박스 생성 및 item클릭 이벤트>

 

<레이아웃 클릭이벤트로 설정>

 

<전체 소스 코드 :  메뉴박스에 필요한 부분만 정리하여 올림>


public class HomeFragment extends Fragment
{

    //region 상담사리스트 관련 변수
    private ConstraintLayout m_constraintLayoutCounselorButton;
    private TextView m_textViewCounselorList;
    private ImageView m_imageViewCounselorListArrow;
    //endregion

    // region 초기화 함수
    private void Init()
    {
        Log.i("ImageSwipeActivity" , "ImageSwipeActivity Init");

        m_textViewCounselorList = (TextView)getView().findViewById(R.id.textView_counselorList);
        m_imageViewCounselorListArrow = (ImageView)getView().findViewById(R.id.imageView_counselorListArrow);
        m_constraintLayoutCounselorButton = (ConstraintLayout) getView().findViewById(R.id.constraintLayout_counselorListButton);
    }
    //endregion

    //region 메인함수

    public HomeFragment()
    {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);
        Init();

        m_constraintLayoutCounselorButton.setOnClickListener(clickListener);
    }

    //endregion

    //region 이벤트 함수

    //click event bridge
    View.OnClickListener clickListener = new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            switch (v.getId())
            {
                case R.id.constraintLayout_counselorListButton:
                    CounselorMenu(v);
                    break;
            }
        }
    };

    //counselor list menu box click event
   private void CounselorMenu(View v) //v: 클릭한 view
    {
        PopupMenu popupMenu = new PopupMenu(getContext(),v); //v 위치에 popup
        popupMenu.getMenuInflater().inflate(R.menu.menu_sounselorlist, popupMenu.getMenu());
        m_imageViewCounselorListArrow.setRotationX(180); //접는 화살표 이미지는 펼치는 화살표로 보이게 회전

//item 클릭시 이벤트
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item)
            {
                m_textViewCounselorList.setText(item.getTitle()); //클릭한 item의 title로 상단 text 바꾸고 싶었음
                m_imageViewCounselorListArrow.setRotationX(0); //다시 접어진 화살표 이미지로 전환

//각 item당 원하는 이벤트 여기에 넣어주면 됨
                switch (item.getItemId())
                {
                    case R.id.rendom:
                        Log.d("HomeFragment", "onMenuItemClick: " + "랜덤");
                        return true;

                    case R.id.highestScore:
                        Log.d("HomeFragment", "onMenuItemClick: " + "신통지수 높은 순");

                        return true;

                    case R.id.highestCase:
                        Log.d("HomeFragment", "onMenuItemClick: " + "상담건수 높은 순");

                        return true;
                }
                return false;
            }
        });

        popupMenu.show(); //팝업메뉴 보이기
    }
    
    //endregion

}



 

구현영상

youtu.be/iQupzusJKa0

 

반응형
Comments