我刚开始使用 ActionBarSherlock 构建一些简单的应用程序,在我的第一个屏幕中,我有一个简单的列表,我添加了新的菜单项以将新项目添加到列表中:
MenuItem newItem = menu.add("New");
newItem.setIcon(R.drawable.ic_compose_inverse)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
现在当用户选择添加一个新项目时,我想启动一个新的操作模式来添加新项目,这个操作模式应该包含一个带有文本框和一个按钮的简单布局,所以我创建了这个布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="text" >
</EditText>
<Button
android:id="@+id/addBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add" />
</LinearLayout>
所以现在我只需要在新的操作模式下将此布局设置为栏:
newItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
actionMode = startActionMode(new MyAction(ListEditor.this));
return true;
}
});
在我的行动中:
private final class MyAction implements ActionMode.Callback {
...
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
View customNav = LayoutInflater.from(context).inflate(R.layout.add_item, null);
getSupportActionBar().setCustomView(customNav);
getSupportActionBar().setDisplayShowCustomEnabled(true);
return true;
}
}
所以基本上我需要 Sherlock 示例中的 ActionModes 和 CustomNavigation 之间的一些东西,但问题是它将布局设置为主栏,而不是为打开操作的新栏。
有什么建议么?