listview作为sherlock操作栏中的操作溢出

时间:2013-01-02 09:00:28

标签: android android-actionbar actionbarsherlock

如何在单击sherlock操作项时获取listdropdown。它应该类似于创建微调器。但我对这种方法有一个问题,因为我不希望所选项目显示在actionbar.it应该是similatr to action overflow.Can any on help me on this.Thanks提前。

1 个答案:

答案 0 :(得分: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也必须包含ID为TextView的{​​{1}}。

或者,您可以使用类似的方法,您可以使用ActionProvider而不是动作布局。

另一个解决方案是创建类似于下拉列表R.id.text的自定义窗口小部件。