728x90

안드로이드 팝업 메뉴를 선택적으로 적용해야 할 경우에 대한 코드다.


/res/menu/popup_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/aaa"
        android:title="초기화" />
    <item android:id="@+id/bbb"
        android:title="로그인" />
    <item android:id="@+id/ccc"
        android:title="제온" />
    <item android:id="@+id/ddd"
        android:title="판테온" />
</menu> 


Java 코드에서 구현할 사항

PopupMenu popup = new PopupMenu(MainActivity.this, view);
popup.setOnMenuItemClickListener(MainActivity.this);
popup.inflate(R.menu.popup_menu);
popup.show(); 

PopupMenu popup = new PopupMenu(MainActivity.this, v);
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
        Toast.makeText(MainActivity.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();
        return true;
    }
});
popup.show();

PopupMenu popup = new PopupMenu(MainActivity.this, view);
Menu menu = popup.getMenu();
if(layoutMode.equals("0")){
    menu.add(Menu.NONE, R.id.aaa, Menu.NONE, "초기화");
    menu.add(Menu.NONE, R.id.bbb, Menu.NONE, "로그인");
} else if(layoutMode.equals("1")){
    menu.add(Menu.NONE, R.id.ccc, Menu.NONE, "제온");
    menu.add(Menu.NONE, R.id.ddd, Menu.NONE, "판테온");
}
popup.setOnMenuItemClickListener(MainActivity.this);
popup.show();


선택 적용하지 않고, 한꺼번에 나오게 하고자 한다면 popup.inflate(R.menu.popup_menu);

레이아웃 모드에 따라서 선택적으로 팝업메뉴가 나오게 하고 싶을 때는 위와 같이 구현해주면 된다.


팝업 메뉴를 완전 동적으로 추가하는 것은 https://link2me.tistory.com/1366 를 참조하면 된다.


동적 메뉴 생성 코드 예제

public class Menu_Item {
    private String shop_name;
    private String url;

    public Menu_Item() {
    }

    public Menu_Item(String shop_name, String url) {
        this.shop_name = shop_name;
        this.url = url;
    }

    public String getShop_name() {
        return shop_name;
    }

    public void setShop_name(String shop_name) {
        this.shop_name = shop_name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
 

package com.link2me.android.dnmenu;

public class MainActivity extends AppCompatActivity implements View.OnClickListener  {
    Context context;
    // ArrayList 선언
    ArrayList<Menu_Item> menuItems  = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graphview);
        context = MainActivity.this;
        initView();
    }

    private void initView() {
        String url = "http://www.abc.com/chart/data.json";
        DataVolley(url);
        addMenuData();
    }

    private void addMenuData(){
        // 안드로이드에서 직접 추가를 하면 신규 사이트가 추가되거나 삭제 또는 변경시
        // 앱을 업그레이드해야만 현행 정보를 이용할 수 있다.
        MenuList("전체","http://www.abc.com/chart/data.json");
        MenuList("서울","http://www.abc.com/chart/data1.json");
        MenuList("경기","http://www.abc.com/chart/data2.json");
    }

    private void MenuList(String shop_name, String url){
        Menu_Item item = new Menu_Item();
        item.setShop_name(shop_name);
        item.setUrl(url);
        menuItems.add(item);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.back_btn:
                finish();
                overridePendingTransition(R.anim.rightin, R.anim.rightout);
                break;
            case R.id.home_btn:
                Intent intent = new Intent(MainActivity.this, Main.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(intent);
                break;
            case R.id.btnMenuList:
                // 팝업 메뉴 나오게 하는 방법
                PopupMenu popupMenu = new PopupMenu(this, view);
                Menu menu = popupMenu.getMenu();
                for(int i = 0; i < menuItems.size(); i++){
                    menu.add(Menu.NONE,i,Menu.NONE, menuItems.get(i).getShop_name());
                }
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        int i = item.getItemId();
                        Toast.makeText(context, item.getTitle() + " 선택했습니다", Toast.LENGTH_SHORT).show();
                        DataVolley(menuItems.get(i).getUrl());
                        return true;
                    }
                });
                popupMenu.show();
                break;
            default:
                break;
        }
    }
}
 



728x90
블로그 이미지

Link2Me

,