2017-02-11 10 views
0

내 Android 패키지에는 기기에 하드웨어 메뉴 옵션이있을 때 작동하는 메뉴 옵션이 있습니다. 다른 장치에 대한 전용 메뉴 단추가 없으므로 단추를 추가하려고 시도 했으므로 팝업이 메뉴를 표시합니다. 팝업은 작동하지만 옵션을 표시하지 않습니다. 그리고 선택 항목에서 작동하는 방법에 대해서도 설명합니다. 팝업 옵션.Android 팝업 메뉴가 메뉴를로드하지 않습니다.

public boolean showPopup(View v) { 
    PopupMenu popup = new PopupMenu(this, v); 
    MenuInflater inflater = popup.getMenuInflater(); 
    inflater.inflate(R.menu.emailmenu, popup.getMenu()); 
    popup.show(); 
    return true; 
} 

그리고이 내 option 코드 :

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/bluebutton" android:icon="@drawable/icon_blue_btn" 
     android:title="" /> 
    <item android:id="@+id/zephyr" android:icon="@drawable/icon_zephyrme" 
     android:title="" /> 
    <item android:id="@+id/skype" android:icon="@drawable/icon_skype" 
     android:title="" /> 
</menu> 

나는 모든 준비가

<ImageButton 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:src="@drawable/ic_overflow_holo_dark" 
    android:contentDescription="@string/descr_overflow_button" 
    android:onClick="showPopup" /> 

이 팝업을 표시하는 내 코드는 다음과 같이

내 버튼 레이아웃입니다 이 onCreateOptionsMenu()를 사용하여 전용 메뉴 키에서 옵션을 트리거하십시오. 팝업에서 작동하도록하는 방법. 대신 제목의 아이콘을 표시 할 경우

+0

제목은 메뉴의 중요 – Jayanth

+0

확인 및 관련 팝업 메뉴 –

+0

사용의 활동을 시작하는 방법'popup.setOnMenuItemClickListener()' – Jayanth

답변

1

처럼하려고합니다. 아이콘이있는 텍스트도 있습니다.

private void showPopupMenu(){ 
    PopupMenu menu=new PopupMenu(this,anchorView); 
    menu.getMenuInflater().inflate(R.menu.popup_menu,menu.getMenu()); 
    setForceShowIcon(menu); 
    menu.setOnMenuItemClickListener(menuClickListner); 
    menu.show(); 
} 

public static void setForceShowIcon(PopupMenu popupMenu) { 
    try { 
     Field[] fields = popupMenu.getClass().getDeclaredFields(); 
     for (Field field : fields) { 
      if ("mPopup".equals(field.getName())) { 
       field.setAccessible(true); 
       Object menuPopupHelper = field.get(popupMenu); 
       Class<?> classPopupHelper = Class.forName(menuPopupHelper 
         .getClass().getName()); 
       Method setForceIcons = classPopupHelper.getMethod(
         "setForceShowIcon", boolean.class); 
       setForceIcons.invoke(menuPopupHelper, true); 
       break; 
      } 
     } 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
} 
//This is Menu click listner 
PopupMenu.OnMenuItemClickListener menuClickListner = new PopupMenu.OnMenuItemClickListener() { 
    @Override 
    public boolean onMenuItemClick(MenuItem item) { 
     switch (item.getItemId()){ 
      case R.id.some_id1: 
       //actions here 
       break; 
      case R.id.some_id2: 
       //actions here.. 
       break; 
      case R.id.some_id3: 
       break; 
      } 
     return false; 
    } 
}; 

희망이 있습니다.

+0

반환 값이 false로 설정되는 이유 –

+0

잘 대답하면 대답을 볼 수 있습니다. http://stackoverflow.com/a/23176258/5235032 – Jayanth

0

은 다음 PopupMenu

방법 setForceShowIcon(menu); 다음과 같은 아이콘을 표시하기 위해 PopMenu을 강제로 작성,이

PopupMenu popup = new PopupMenu(MainActivity.this, button1); 
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); 
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       startActivity(new Intent(MainActivity.this, SecounActivity.class)); 
       return true; 
      } 
     }); 
popup.show(); 
+0

당신이 이유를 설명 할 수 이것은 다르며 왜 이것이 효과가 있습니까? 그것은 나에게 OP의 코드와 동일하게 보입니다 –

+0

작동 여부,'MenuInflater inflater = popup.getMenuInflater(); inflater.inflate (R.menu.emailmenu, popup.getMenu());'새로운 객체를 생성하는 것과 같습니다. 확실하지 100 %하지만 이것은 문제가 될 수 –

+0

내 코드가 작동하지만 제목을 추가하지 않았으므로 이름이 오지 않았다. 그래서 이것은 제 첫 번째 관심사 였고 두 번째로 나는 선택된 팝업 옵션에 기반한 활동을 시작하고 싶었습니다. 나는 그것이 내 문제를 해결하는 것처럼 정확한 답을 표시했다. –