2017-02-11 9 views
0

私のアンドロイドアプリでは、デバイスに専用のハードウェアメニューオプションがある場合に機能するメニューオプションがあります。別のデバイスのために私は専用のメニューボタンを持っていないので、ボタンを追加しようとしましたが、ポップアップはメニューを表示します。ポップアップは機能していますが、オプションを表示していません。ポップアップオプション。Androidポップアップメニューがメニューを読み込んでいません

次のように私のボタンのレイアウトは次のとおりです。

<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" /> 

これは、ポップアップを表示するために私のコードです:

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> 

Iすべての準備このonCreateOptionsMenu()を使用して、専用のメニューキーからオプションをトリガします。それをポップアップからどのように動作させるか。あなたの代わりにタイトルのアイコンを表示したい場合は

+0

タイトルは、[OK]メニュー – 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

なぜ返りが偽に設定されるのですか –

+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

私のコードは機能しませんでしたが、私はタイトルが追加されていないので名前が来ていませんでした。これが私の最初の関心事でした。次に、選択されたポップアップオプションに基づいてアクティビティを開始したいと考えました。私は正しい答えを、それが私の問題を解決したようにマークしました。 –

関連する問題