如何在单击 sherlock 操作项时获取 listdropdown。它应该类似于创建微调器。但是我对这种方法有疑问,因为我不希望在操作栏上显示所选项目。它应该类似于操作溢出。任何人都可以帮助我解决这个问题。提前致谢。
1 回答
您可以在菜单项的操作布局中使用Spinner
(或IcsSpinner
for )创建此类行为。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
对默认版本 (in ) 使用布局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
代替操作布局。
另一种解决方案是创建类似于 dropdown 的自定义小部件Spinner
。