2016-02-16 21 views
8

Sono nuovo su Android e sto creando il menu a comparsa Listview. Ma sto avendo il problema width e height. Il menu a comparsa può richiedere più altezza e larghezza. Ci sono molte domande in SO, ma nessuna di queste mi ha aiutato.Problema del menu popup in Android ListView

A creare Menu popup Ho provato il metodo .

1] Uso menù un'altra con il codice qui sotto

private void showPopupMenu(View view){ 
     Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenu); 
     PopupMenu popupMenu = new PopupMenu(wrapper,view); 

     popupMenu.getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu()); 
     popupMenu.show(); 

     popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ 
      @Override 
     public boolean onMenuItemClick(MenuItem item){ 
       switch (item.getItemId()){ 
        case R.id.install: 
         Intent intent = new Intent(ViewAllRelationActivity.this,EditRelativeActivity.class); 
         startActivity(intent); 
         break; 
        case R.id.addtowishlist: 
         break; 

       } 
       return false; 
      } 
     }); 
    } 

Dà questo uscita:

enter image description here

2] Uso ContextMenu essa visualizza il seguente uscita:

possiamo mantenere larghezza e altezza in ContextMenu Ma mostrare sempre nel Centronot each row of our Listview Data.

enter image description here

Ma voglio below Image type Popup menu. Larghezza e altezza sono piccole.

enter image description here

Si prega di fornire la soluzione per questo.

+0

http://stackoverflow.com/a/22311108/5093666 potrebbe essere questa risposta sarà utile per voi – curiousMind

risposta

2

È possibile aggiungere tali opzioni a livello di codice senza utilizzare il file xml come indicato di seguito, potrebbe essere utile per risolvere il problema.

Qui ONE e TWO mostrano l'indice delle opzioni fornite nel menu popup. Come il 1 ° posizione EDIT POST sulla 2a posizione RIMUOVERE POST ecc

1) il menu di scelta rapida aprire l'immagine Clicca:

private final static int ONE = 1; 
private final static int TWO = 2; 

PopupMenu popupMenu = new PopupMenu(this, findViewById(R.id.img_detail_information_options)); 
popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, getResources().getString(R.string.detail_information_edit_post)); 
popupMenu.getMenu().add(Menu.NONE, TWO, Menu.NONE, getResources().getString(R.string.detail_information_remove_post)); 
popupMenu.setOnMenuItemClickListener(this); 
popupMenu.show(); 
+0

Questo codice non funziona. – Harshad

+0

Hai ricevuto qualche errore? – Bhavnik

+0

ONE e TWO non trovati e anche popupMenu.setOnMenuItemClickListener (this); dandomi un errore – Harshad

2

Se si utilizza l'adattatore, si può mettere in GetView (. ..) metodo adattatore

imvMore.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showPopupMenu(act,v); 
     } 
    }); 

e mettere metodo

private void showPopupMenu(Activity act, View view){ 
    PopupMenu popupMenu = new PopupMenu(act,view); 
    popupMenu.getMenuInflater().inflate(R.menu.menu_popup, popupMenu.getMenu()); 
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()) { 

      } 
      return true; 
     } 
    }); 
    popupMenu.show(); 
} 

nella classe dell'adattatore.

Nota: atto è attività è necessario legare quando creare adattatore costruttore, ad esempio:

public YourAdapter(Activity act, ArrayList<ItemOfYourModel> data){ 
    this.data = data; 
    this.act = act; 
} 

In Attività, è possibile codificare:

ArrayList<ItemOfYourModel> listData = new ArrayList<ItemOfYourModel>(); 
listData.add(new YourItemOfYourModel(...)); 
YourAdapter adapter = new YourAdapter(this,listData); 
+0

Come associare l'atto nell'adattatore per favore descrivere ampiamente? – Harshad

+0

@Harshad, quale adattatore e attività hai usato? E hai usato listview o recyclerview? – dolphin

+0

listview e BaseAdapter – Harshad

1

La migliore soluzione di questo credo è quello di usa PopupWindow, puoi controllarne ogni cosa ed è molto facile creare il menu che desideri.

2

È possibile utilizzare ListPopupWindow per ottenere ciò che si desidera ottenere. È possibile impostare l'icona delle opzioni o l'icona del menu come ancoraggio per la finestra popup.

ListPopupWindow mListPopupWindow; 
mListPopupWindow = new ListPopupWindow(this, null); 
mListPopupWindow.setWidth(300); 
mListPopupWindow.setAnchorView(menuIcon); 
mListPopupWindow.setHeight(200); 
mListPopupWindow.setAdapter(yourAdapter); 
mListPopupWindow.show(); 

Otterrete quello che volete.

+0

Questa soluzione non funziona per me. – Harshad

+0

Che problema stai affrontando? – Vishal

+0

Visualizza centro lo voglio dinamico? – Harshad

1

Google Play utilizza il tema Holo per PopupMenu. Si può fare lo stesso con la creazione di un custom style nel styles.xml:

<style name="PopupMenuStyle" parent="android:Theme.Holo.Light"> 
     <!-- Your custom attributes must be put here. This is optional, but the parent must not be changed --> 
</style> 

e quindi modificare lo stile PopupMenu nel codice:

Context wrapper = new ContextThemeWrapper(this, R.style.PopupMenuStyle); 
PopupMenu popupMenu = new PopupMenu(wrapper,view); 
+0

Ho usato questo ma la visualizzazione del menu nel centro come ContextMenu lo voglio ogni riga di ListView. – Harshad

+0

È necessario impostarlo su tutta la vista. Invece, aggiungi un pulsante come Google Play nella voce dell'elenco. Quindi non apparirà al centro. – Piyush

+0

Come posso impostare la larghezza e l'altezza è dare il mio primo conditon della domanda. – Harshad

Problemi correlati