2014-05-08 13 views
12

Ho un PopupMenu visualizzato quando faccio clic su un pulsante di azione in una barra di azione. Vorrei che il MenuItem, nel mio PopupMenu, con un layout personalizzato come questo:Menu Android Oggetto Layout personalizzato

layout/menu_item_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/menuItemLayout" 

    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imageViewMenuItem" 
     android:layout_width="20dip" 
     android:layout_height="20dip" 
     android:src="@drawable/abc_list_focused_holo" /> 

    <TextView 
     android:id="@+id/textViewMenuItem" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextViewMenuItem" /> 

</LinearLayout> 

Questo è il xml di PopUpMenu:

menù/pop_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     tools:context="apparound.actiobarpopupstylefacebook.Main" > 

    <item 
     android:id="@+id/popupItem" 
     android:showAsAction="ifRoom"/> 
</menu> 

Nel mio codice di attività è la seguente:

public void showPopup(int idR){ 
View menuItemView = findViewById(idR); 
PopupMenu popup = new PopupMenu(this, menuItemView); 
MenuInflater inflate = popup.getMenuInflater(); 
inflate.inflate(R.menu.pop_menu, popup.getMenu()); 
MenuItem menuItem= popup.getMenu().findItem(R.id.popupItem); 
menuItem.setActionView(R.layout.menu_item_layout); 
popup.show(); 
} 

Ma quando compare popup, l'elemento è vuoto. Ho sbagliato a usare il metodo setActionview()? Grazie.

risposta

20

Per layout personalizzati non è possibile utilizzare un menu, un'opzione alternativa è un PopupWindow

PopupWindow popupwindow_obj = popupDisplay(); 
popupwindow_obj.showAsDropDown(clickbtn, -40, 18); // where u want show on view click event popupwindow.showAsDropDown(view, x, y); 

public PopupWindow popupDisplay() 
{ 

    final PopupWindow popupWindow = new PopupWindow(this); 

    // inflate your layout or dynamically add view 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View view = inflater.inflate(R.layout.mylayout, null); 

    Button item = (Button) view.findViewById(R.id.button1); 

    popupWindow.setFocusable(true); 
    popupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); 
    popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 
    popupWindow.setContentView(view); 

    return popupWindow; 
} 

creare questo file XML nella cartella res/layout con nome mio layout.xml

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Window test" /> 
</LinearLayout> 
+0

tra 20+ domande e risposte, la tua risposta è la migliore. devi dare +500 o +1000 upvote. –

+0

C'è un bordo scuro sulla finestra popup –

+0

Risolto con 'popupWindow.setBackgroundDrawable (null);' –