在我的应用程序中有一个ListFragment,其中列表中的每个项目都包含一个复选框.每当用户点击其中一个复选框时,应用程序就会启动一个ActionMode上下文菜单.但我希望应用程序在单击另一个组件时关闭ActionMode菜单.我尝试Fragment#closeContextMenu()没有成功.
任何想法我怎样才能做到这一点?
android android-fragments android-3.0-honeycomb contextual-action-bar
我有一个应用程序,我希望能够显示一个TextView(或EditText),允许用户选择一些文本,然后按一个按钮,用该文本完成一些事情.在Honeycomb之前的Android版本上实现此功能是没有问题的,但在Honeycomb及以上默认的长按操作是显示带有复制/剪切/粘贴选项的操作栏.我可以拦截长按以显示我自己的操作栏,但后来我没有显示文本选择句柄.
一旦我开始自己的ActionMode,我如何显示文本选择句柄?
这是我用来启动ActionMode的代码,除了没有显示文本选择句柄外,它可以正常工作:
public boolean onLongClick(View v) {
if(actionMode == null)
actionMode = startActionMode(new QuoteCallback());
return true;
}
class QuoteCallback implements ActionMode.Callback {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.quote, menu);
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch(item.getItemId()) {
case R.id.quote:
Log.d(TAG, "Selected menu");
mode.finish();
// here is where I would grab the selected text
return true;
}
return false;
} …Run Code Online (Sandbox Code Playgroud) 我应该如何在AdapterView上使用ActionBarSherlock实现多选,因为它不提供MultiChoiceModeListener?
这就是它的样子

你怎么能这样做?
android actionbarsherlock android-actionbar contextual-action-bar
我想覆盖现有的默认上下文操作栏(CAB)进行文本选择.我的意思是,当我在webview上选择一些文本时,我想用自己的按钮显示我自己的CAB.我尝试使用Android文档实现CAB.OnLongClickListener不捕获Web视图中的文本选择事件.捕获文本选择的事件是什么?是否可以隐藏默认CAB并在文本选择上显示我的CAB?
childWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
if (mActionMode != null) {
return false;
}
// Start the CAB using the ActionMode.Callback defined above
mActionMode = startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
}
});
Run Code Online (Sandbox Code Playgroud) 在尝试遵循Android设计指南时,我遇到了一个小小的困境.
我希望有一个项目列表,我可以长按几个(多选),然后对它们执行批量操作.
设计指南建议使用Contextual Action Bar,这听起来就像我想到的那样.问题是,我正在努力保持与API 7的兼容性(由于我的手机目前是2.3.3).
我正在使用ActionBarSherlock获取其他操作栏的东西,但我似乎无法弄清楚如何启动它以启动上下文操作栏,也没有弄清楚如何将任意按钮添加到ABS中的ActionBar.我看到你可以做标签,所以也许这就是答案,但是因为我试图允许多选,我不想拥有正常的模态上下文菜单.
我有一个应用栏和导航抽屉的活动.应用栏使用appcompat-v7库版本21. +中的新工具栏类实现,导航抽屉显示在其前面.
该活动包含一个列表视图,其中包含可以选择的项目,因此我显示了一个上下文操作栏(CAB).它是通过调用来启动的:
ActionBarActivity.startSupportActionMode(android.support.v7.view.ActionMode.Callback callback)
Run Code Online (Sandbox Code Playgroud)
默认情况下,CAB插入工具栏上方而不是覆盖它; 似乎CAB默认只覆盖真正的ActionBar.作为展现在这个答案中,CAB正确叠加时,这个主题属性设置工具栏:
<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)
但这也使得CAB覆盖了导航抽屉,根据材料设计规格,这是不正确的.主要的Android设计文档仍然建议在打开导航抽屉时隐藏CAB并在关闭时再次显示它,这可以用来"修复"问题,但它不应该是必要的.如上所述,Material设计规范没有指定当导航抽屉打开时应该隐藏CAB,并且因为导航抽屉应该在CAB上打开,隐藏CAB实际上是一种视觉分心.
有没有办法在CAB前面显示导航抽屉,同时还能覆盖工具栏?
android contextual-action-bar navigation-drawer android-5.0-lollipop android-toolbar
可能重复:
如何调用ActionBar的类似ContextMenu的行为?
如何识别是否在ActionMode中单击了"完成"按钮
如何正确处理动作模式"完成"按钮?

我在动作模式下对一个对象执行一些操作,我想通过点击这个按钮来保存结果 - 比如"保存并退出".如何在此按钮上按键按键?
我看到的唯一方法是覆盖带有标志的onDestroyActionMode(ActionMode模式)方法,在dispatchKeyEvent(KeyEvent事件)中触发以处理它是否由"后退"按钮按下引起.
logcat的:
"完成"按下了
10-03 14:31:58.211: D/DESTROY(967): onDestroyActionMode
Run Code Online (Sandbox Code Playgroud)
"后退"紧迫
10-03 14:32:01.771: D/DISPATCH(967): Action: 0/n Keykode: 4
10-03 14:32:01.911: D/DISPATCH(967): Action: 1/n Keykode: 4
10-03 14:32:01.911: D/DESTROY(967): onDestroyActionMode
Run Code Online (Sandbox Code Playgroud)
但这看起来并不是一种好的做法.有没有"好"的解决方案?
UPD:我知道如何在ActionMode.Callback中调用动作模式和处理动作项事件,但是如何按"完成"按钮按下来修改它的行为?"后退"按钮和"完成"按钮既导致ActionMode.Callback的onDestroyActionMode()呼叫.
android actionbarsherlock android-actionbar contextual-action-bar
我在上下文操作栏(CAB)上寻找样式信息.我只需要改变文本的颜色.

从上面可以看出,这是使用标准的Theme.Holo.Light.DarkActionBar主题,所以我只需要将文本颜色设置为白色!
谁能指出我正确的方向?
在Android 3.0的,当你选择,例如一些文本,将动作条切换到文本菜单式模式,使您能够与所选文本做的动作:复制/股/ etc和"完成"按钮将出现在左侧使用户能够离开此模式.
如何在我的应用程序中将ActionBar切换到此模式(当然是我的菜单项)?我在文档中找不到这个.
我有一个应用程序使用主题属性(colorPrimaryDark)为Android v21 +上的状态栏着色:

这工作正常.现在,当用户长按列表项并进入上下文操作模式时,我可以使用属性actionModeBackground为CAB栏着色,所以它看起来像这样:

因此操作栏是灰色的,这就是我想要的,但状态栏仍然使用主题深色进行着色.我不想那样,我想把它变成深灰色或黑色.
我怎样才能做到这一点?我没有看到任何可以在这里工作的主题属性.