안드로이드 팝업 메뉴를 선택적으로 적용해야 할 경우에 대한 코드다.
/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; } } } |