2013-02-14 5 views
13

Ich schreibe eine Android App für Tablets. Ich bin mit der Aktionsleiste gegangen, um meine Icons zu erstellen. Ich muss jedoch eine benutzerdefinierte Ansicht öffnen, wenn auf eines der Menüelemente geklickt wird.Android Aktionsleiste benutzerdefinierte Dropdown-Ansicht auf Artikel klicken

Ich möchte keine benutzerdefinierte Aktionsleiste - Ich muss eine benutzerdefinierte Ansicht aufblasen, wenn auf die Aktionsleiste "Themen durchsuchen" geklickt wird. Diese Ansicht muss wie ein Dropdown-Menü aussehen, aber mein eigenes benutzerdefiniertes Layout verwenden, da es nicht für die Navigation verwendet wird. Hier

Drop down menu

ist mein 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> 

nahm ich die ActionProviderClass würde mir erlauben, eine benutzerdefinierte Ansicht zu instanziiert, wenn die Aktionsleiste Element geklickt wird, aber ich kann nicht einen Weg erarbeiten - Vielleicht gehe ich den falschen Weg.

Jede Hilfe zu diesem wäre VIEL geschätzt! Vielen Dank!

UPDATE: Vielen Dank für Links zu Action-Bar-Styling, aber ich möchte nicht einfach ein Drop-Down-Stil. Ich möchte eine benutzerdefinierte Ansicht aufblasen. Die Ansicht wird auch DB-Abfragen usw. durchführen.

+1

ich suche nach einer Probe, die Sie als Bild geschrieben haben hier über, können Sie bitte geben Sie mir jede Probe Beispiel oder andeuten, wie benutzerdefinierte Dropdown-Liste erstellen und dynamisch Menüpunkte dort hinzufügen. – Naruto

+1

die Benutzeroberfläche sieht gut aus. Hast du die App fertiggestellt? ist es zum Download bereit? – Zen

Antwort

11

Ok Ich habe selbst eine Lösung ausgearbeitet. Grundsätzlich wird mit der actionProviderClass eine actionView in der actionBar instanziiert. In dieser Klasse können Sie einen onClick-Listener an die Ansicht anhängen, die Sie aufblasen. Ich habe diesen Listener verwendet, um eine Dropdown-Ansicht im Hauptfenster aufzublasen, wenn darauf geklickt wurde.

Zum Beispiel

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

Wäre großartig, wenn Sie Informationen darüber geben könnten, wie Sie den Dropdown-Kurs gemacht haben. Basiert es auf irgendeinem anderen Widget oder ist es nur ein ListView? – jelgh

+0

Wie und wo haben Sie onClick-Listener für die Elemente im ActionProvider angehängt? – lschlessinger