Cómo crear un PopupMenu personalizado en Android

¿Cómo puedo replicar algo como lo hice a continuación en Balsamiq?

Hice este menú, pero sólo se muestra el texto de los elementos (no los iconos). ¿Es posible mostrar el título y el icono en un PopupMenu?

Aquí está mi create_post_menu.xml

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_photo" android:icon="@drawable/ic_action_camera" android:title="@string/action_photo" android:showAsAction="always|withText" /> <item android:id="@+id/action_video" android:icon="@drawable/ic_action_video" android:title="@string/action_video" android:showAsAction="always|withText" /> <item android:id="@+id/action_text" android:icon="@drawable/ic_action_edit" android:title="@string/action_text" android:showAsAction="always|withText" /> <item android:id="@+id/action_link" android:icon="@drawable/ic_action_web_site" android:title="@string/action_link" android:showAsAction="always|withText" /> </menu> 

UN

Editar

Estos son mis métodos onCreateOptionsMenu y onOptionsItemSelected :

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_new) { View menuItemView = findViewById(R.id.action_new); PopupMenu popupMenu = new PopupMenu(this, menuItemView); popupMenu.inflate(R.menu.create_post_menu); popupMenu.show(); return true; } else if(item.getItemId() == R.id.action_search) { return true; } else if(item.getItemId() == R.id.action_settings) { startActivity(new Intent(MainActivity.this, SettingsActivity.class)); return true; } else if(item.getItemId() == R.id.action_help) { return true; } else { return super.onOptionsItemSelected(item); } } 

3 Solutions collect form web for “Cómo crear un PopupMenu personalizado en Android”

create_post_menu este problema simplemente poniendo el create_post_menu dentro del item cuyo icono es un + .

Por ejemplo, tengo (usando AppCompat):

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_new" android:icon="@drawable/ic_action_new" android:title="@string/action_new" app:showAsAction="always"> <menu> <item android:id="@+id/action_photo" android:icon="@drawable/ic_action_camera" android:title="@string/action_photo" app:showAsAction="always|withText" /> <item android:id="@+id/action_video" android:icon="@drawable/ic_action_video" android:title="@string/action_video" app:showAsAction="always|withText" /> <item android:id="@+id/action_text" android:icon="@drawable/ic_action_text" android:title="@string/action_text" app:showAsAction="always|withText" /> <item android:id="@+id/action_place" android:icon="@drawable/ic_action_place" android:title="@string/action_place" app:showAsAction="always|withText" /> <item android:id="@+id/action_more" android:title="@string/action_more" android:visible="false" app:showAsAction="always|withText" /> </menu> </item> ...(more menu items here) </menu> 

Sin AppCompat, podría simplemente deshacerse de la app espacio de nombres XML sustituyendo la app por android .

 import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.PopupMenu; import android.widget.Toast; public class MainActivity extends Activity { Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button) findViewById(R.id.button1);//your created butto button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Creating the instance of PopupMenu PopupMenu popup = new PopupMenu(MainActivity.this, button1); //Inflating the Popup using xml file popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); //registering popup with OnMenuItemClickListener 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();//showing popup menu } });//closing the setOnClickListener method } } 

Espero que mi respuesta anterior aquí le pueda ayudar.
Si sólo desea un menú emergente similar, puede utilizar ActionProvider. Es más poderoso.
Si lo desea como un verdadero menú, puede utilizar personalizado PopupMenu.

  • Establecer el menú emergente a pantalla completa
  • Estilo PopupMenu Android
  • ¿Cómo puedo arreglar NoClassDefFoundError en Android para android.widget.PopupMenu?
  • Cómo obtener la posición de un elemento de un PopupMenu en un ListView personalizado
  • La mejor manera de crear menú desplegable en android 2.x como en ICS
  • PopupMenu hace clic para que RecyclerView se desplace
  • PopupMenu PopupWindow $ PopupViewContainer fuga
  • Android cómo mostrar PopupMenu en webview como GMail
  • ¿Cómo mostrar el menú emergente exacto debajo de la barra de acción?
  • Cambiar el estilo del menú emergente - no funciona
  • Cómo cambiar el color de texto y el tamaño de un menú emergente en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.