2013-01-02 57 views
3

如何得到一個listdropdown點擊sherlock行動item.It應該是類似於創建微調。但我有這種方法的問題,因爲我不想要在操作欄上顯示選定的項目。它應該是相似的行動overflow.Can任何幫助我這一點。提前感謝。listview作爲行動溢出sherlock actionbar

回答

3

您可以在菜單項的操作佈局中使用Spinner(或IcsSpinner對於ActionBarSherlock)創建此類行爲。儘管你必須使用一些小技巧 - 隱藏當前選中的項目。

創建菜單的xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item1" 
      android:actionLayout="@layout/my_dropdown_action_layout" 
      android:showAsAction="always"/> 

res/layout-v14/my_dropdown_action_layout.xml將包含(此版本用於本地操作欄):

<?xml version="1.0" encoding="utf-8"?> 
<Spinner xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:background="?attr/actionBarItemBackground" 
      android:id="@+id/spinner"/> 

res/layout/my_dropdown_action_layout.xml將包含(此版本用於ActionBarSherlock):

<?xml version="1.0" encoding="utf-8"?> 
<com.actionbarsherlock.internal.widget.IcsSpinner 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:background="?attr/actionBarItemBackground" 
      android:id="@+id/spinner"/> 

使用IcsSpinner是創建下拉微調器所必需的。如果您使用res/layout-v14/my_dropdown_action_layout.xml佈局作爲默認版本(在res/layout/中),它在Android 2.x上的表現會有所不同(微調控制器將處於對話模式)。

現在您必須正確填寫數據。只需創建一個Activity,你吹的菜單,是這樣的:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.my_menu, menu); 
    MenuItem menuItem = menu.findItem(R.id.item1); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_layout, R.id.text, items); 
    adapter.setDropDownViewResource(R.layout.list_item); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     // native ActionBar 
     Spinner sp = (Spinner) menuItem.getActionView(); 
     sp.setAdapter(adapter); 
    } else { 
     // ActionBarSherlock 
     IcsSpinner sp = (IcsSpinner) menuItem.getActionView(); 
     sp.setAdapter(adapter); 
    } 

    return super.onCreateOptionsMenu(menu); 
} 

現在來隱藏當前所選項目的伎倆。佈局res/layout/spinner_layout.xml將包含此:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@null"> 
    <TextView 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:id="@+id/text" 
      android:visibility="invisible"/> 
    <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:src="@drawable/my_dropdown_icon" 
      android:background="@null"/> 
</FrameLayout> 

這樣,你看到一個圖標的菜單項,你有下拉菜單。請注意,版面res/layout/list_item.xml也必須包含TextView,其ID爲R.id.text

或者,您可以使用類似的方法,您可以使用ActionProvider而不是操作佈局。

另一種解決方案是創建類似於下拉菜單Spinner的自定義小部件。