2013-02-14 19 views
13

Sto scrivendo un'app Android per tablet. Sono andato con la barra delle azioni per creare le mie icone. Tuttavia, ho bisogno di aprire una vista personalizzata quando si fa clic su uno degli elementi del menu.Visualizzazione a discesa personalizzata della barra delle azioni Android sull'articolo click

Non voglio una barra delle azioni personalizzata - Devo ingrandire una vista personalizzata quando si fa clic sulla voce della barra delle azioni "Sfoglia soggetti". Questa vista dovrà apparire come un menu a discesa ma utilizzare il mio layout personalizzato in quanto non verrà utilizzato per la navigazione.

Drop down menu

Ecco il mio menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/menu_browse" 
     android:title="Browse Subjects" 
     android:showAsAction="always" 
     android:actionLayout="@layout/action_layout_browse" 
     android:actionProviderClass="au.com.pearson.f12catalogue.action_providers.BrowseProvider" 
      /> 
    <item android:id="@+id/menu_settings" 
     android:title="Settings" 
     android:orderInCategory="100" 
     android:showAsAction="never" /> 
</menu> 

ho assunto l'ActionProviderClass mi avrebbe permesso di creare un'istanza di una visualizzazione personalizzata quando l'elemento barra delle operazioni viene cliccato, ma non riesco a trovare un modo - Forse sto andando nella direzione sbagliata.

Qualsiasi aiuto su questo sarebbe MOLTO apprezzato! Grazie!

AGGIORNAMENTO: Grazie per i collegamenti a stile barra delle azioni, ma non voglio semplicemente stile un menu a discesa. Voglio gonfiare una vista personalizzata. La vista eseguirà anche query DB ecc.

+1

Sto cercando un campione che avete pubblicato come immagine qui, potete per favore mi fornire alcun esempio campione o suggerire come creare discesa personalizzato e aggiungere dinamicamente le voci di menu laggiù. – Naruto

+1

l'interfaccia utente sembra buona. hai completato l'app? è disponibile per il download? – Zen

risposta

11

Ok, ho risolto io stesso una soluzione. In pratica, actionProviderClass viene utilizzato per creare un'istanza di un'azioneView in actionBar. In questa classe è possibile allegare un ascoltatore onClick alla vista che si gonfia. Ho usato questo listener per gonfiare una vista a cascata nel frame principale quando cliccato.

Per esempio

public class BaseProvider extends ActionProvider { 

    protected final Context context; 
    protected final int layout; 
    protected final BaseProvider self; 
    protected View view; 
    protected int positionLeft = 0; 
    protected Dropdown dropdown; 

    public BaseProvider(Context context, int layout, Dropdown dropdown) { 
     super(context); 
     this.layout = layout; 
     this.context = context; 
     this.self = this; 
     this.dropdown = dropdown; 
    } 

    @Override 
    public View onCreateActionView() { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

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

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       self.onItemClick(); 
      } 
     }); 
     this.view = view; 
     return view; 
    } 

    public boolean onItemClick(){ 
     toggleDropdown(); 
     return true; 
    } 

    protected void toggleDropdown(){ 
     this.positionLeft = getRelativeLeft(view); 
     DropdownInflater.getInstance().toggleDropdown(this.dropdown,this.positionLeft); 
    } 

    protected int getRelativeLeft(View view) { 
     int[] loc = new int[2]; 
     view.getLocationOnScreen(loc); 
     return loc[0]; 
    } 
} 
+10

Sarebbe fantastico se potessi fornire informazioni su come hai fatto la lezione di Dropdown. È basato su qualche altro Widget o è solo un ListView in qualche modo? – jelgh

+0

Come e dove hai allegato onClick i listener per gli articoli in ActionProvider? – lschlessinger

Problemi correlati