2013-02-14 60 views
13

我正在爲平板電腦寫一個Android應用程序。我已經與行動欄去創建我的圖標。但是,我需要在單擊其中一個菜單項時打開一個自定義視圖。安卓行動酒吧自定義下拉查看項目點擊

我不想要一個自定義操作欄 - 點擊「瀏覽主題」操作欄項目時,需要給自定義視圖充氣。此視圖需要顯示爲下拉菜單,但使用我自己的自定義佈局,因爲它不會用於導航。

Drop down menu

這是我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> 

我以爲ActionProviderClass,讓我來實例化一個自定義視圖點擊操作欄項目時,但我不能工作出路 - 也許我會走錯路。

任何幫助,這將是很多讚賞!謝謝!

更新: 感謝鏈接到操作欄樣式,但我不想簡單地設置下拉式樣。我想誇大自定義視圖。該視圖也會執行數據庫查詢等。

+1

我找你已經在這裏張貼圖像的樣本,可以請你給我提供任何樣品例子或暗示如何創建自定義下拉列表,並動態地在那裏添加菜單項。 – Naruto 2013-03-04 02:34:29

+1

用戶界面看起來不錯。你是否完成了應用程序?是否可以下載? – Zen 2014-02-20 17:50:42

回答

11

好吧我自己制定了一個解決方案。基本上,actionProviderClass用於在actionBar中實例化一個actionView。在這個類中,你可以附加一個onClick監聽器給你膨脹的視圖。我使用這個監聽器在單擊主框架時爲下拉視圖充氣。

例如

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

如果你能提供你做Dropdown類的信息,那將會很棒。它是基於其他一些小部件還是僅僅是一個ListView? – jelgh 2013-08-13 06:26:50

+0

您如何以及在哪裏爲ActionProvider中的項目添加了onClick監聽器? – lschlessinger 2014-07-02 15:24:50