我已经实现了一个ActionMode.Callback自定义文本选择功能WebView.我遇到的问题是选择和操作模式状态不匹配.
当我长按时,一切都很好.

当我与其中一个按钮或WebView(不包括实际选择)进行交互时,ActionMode应该销毁它,并且选择应该消失.

在Android 4.4,KitKat中,这正是发生的事情.
然而,这不是4.1.1 - 4.3,Jelly Bean中发生的情况.单击其中一个按钮时,不会删除选择.

当我在选择之外点击时,恰好相反.删除选择,但上下文操作栏仍保留在屏幕上.
Run Code Online (Sandbox Code Playgroud)
android selection webview contextual-action-bar android-actionmode
Android的文档说明了很多关于CAB的文档,但没有关于如何更改"完成"的文本.有谁知道怎么做?
其他链接:
只能在动作模式下使用拆分操作栏?
我的应用程序只有顶部操作栏,但它的Contextual Action Bar需要分成两部分(顶部/底部).
我找到了这个:
上下文操作栏不一定与操作栏相关联.它们独立运行,即使上下文操作栏在视觉上超过了操作栏位置.
在http://developer.android.com/guide/topics/ui/menus.html#CAB上.所以我认为这是可能的,但是怎么样?
android android-actionbar contextual-action-bar android-actionmode
我的应用主题看起来如下面的屏幕截图所示:

由于主题基于Theme.Holo.Light其包含暗动作条文本和溢出图标,我使用以下样式调整溢出图标:
<style name="ActionBar.Light" parent="android:style/Widget.Holo.ActionBar">
<item name="android:background">@color/highlight</item>
<item name="android:titleTextStyle">@style/TextAppearance.ActionBar.Title.Light</item>
<item name="android:subtitleTextStyle">@style/TextAppearance.ActionBar.Subtitle.Light</item>
</style>
...
<style name="Theme.Light" parent="@android:style/Theme.Holo.Light">
...
<item name="android:actionBarStyle">@style/ActionBar.Light</item>
<item name="android:actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item>
...
</style>
Run Code Online (Sandbox Code Playgroud)
当检查一个或多个列表条目时,我想显示一个白色的上下文操作栏,但不幸的是白色背景上看不到白色溢出图标:

有关如何仅为上下文栏更改溢出图标的任何想法 - 通过样式还是以编程方式?
似乎没有选项可以独立于标准操作栏之一更改上下文操作栏的溢出图标.所以我别无选择,只能将上下文栏的背景颜色更改为深灰色,以使白色溢出按钮可见:

右侧的图标在我的控制之下,因此很容易更改它们.可以使用主题属性轻松更改左侧的"完成"图标和文本(检查计数器).只能使用属性更改"完成"图标和检查计数器之间的细分隔符.他们需要一个自定义布局 - 这就是为什么我现在离开它的原因.
这是我的上下文栏样式和主题的相关部分:
<style name="TextAppearance.ActionBar.Title" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:fontFamily">sans-serif-light</item>
</style>
<style name="TextAppearance.ActionBar.Title.Light">
<item name="android:textColor">#ffffff</item>
</style>
<style name="ContextualBar.Light" parent="android:style/Widget.Holo.ActionMode">
<item name="android:background">#666666</item>
<item name="android:titleTextStyle">@style/TextAppearance.ActionBar.Title.Light</item>
<item name="android:actionMenuTextColor">#ffffff</item>
</style>
<style name="Theme.Light" parent="@android:style/Theme.Holo.Light">
...
<item name="android:actionBarStyle">@style/ActionBar.Light</item>
<item name="android:actionModeStyle">@style/ContextualBar.Light</item>
<item name="android:actionModeCloseDrawable">@drawable/ic_action_done</item>
<item name="android:actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item>
<item name="android:actionMenuTextColor">#ffffff</item>
...
</style>
Run Code Online (Sandbox Code Playgroud)
广告:您可以在Google Play上的最终应用"uPod"中看到完整结果!
在android开发人员的菜单指南中提到:
当用户取消选择所有项目,按BACK按钮或选择栏左侧的完成操作时,操作模式将被禁用,上下文操作栏将消失.
从技术上讲,这意味着mActionMode.finish(),在BACK按钮按下或Done动作选择呼叫ActionMode.Callback onDestroyActionMode()方法.
我的问题是如何Toast("Action mode exit by Done select")在用户选择时执行自定义操作(例如)Done,以及Toast("Action mode exit by BACK")在用户按下时执行另一个操作(例如)BACK?
android actionbarsherlock android-actionbar contextual-action-bar
我有ListFragment一个简单的联系ArrayAdapter.ListView包含可检查项的列表,其XML布局如下:
<ListView android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:layout_marginLeft="2mm"
android:layout_marginRight="2mm"
android:drawSelectorOnTop="false"
android:longClickable="true"
android:choiceMode="multipleChoiceModal"/>
Run Code Online (Sandbox Code Playgroud)
如您所见,我在XML布局中设置了long-clickable和choicemode属性.
我设置适当的听众中ListFragment的onViewCreated回调:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ListView list_view = getListView();
list_view.setMultiChoiceModeListener(this);
list_view.setOnItemLongClickListener(this);
}
Run Code Online (Sandbox Code Playgroud)
我this作为listener参数传入,因为我ListFragment还实现了那些侦听器的回调.
这是我遇到问题的回调:
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id
{
activity.startActionMode(this);
return true;
}
Run Code Online (Sandbox Code Playgroud)
首先,onItemLongClick从未调用过.但是,当长按一个列表项时,Contextual Action Bar(CAB)会启动并完美运行!
事实上,如果没有这个回调,CAB会正确启动!我的回调使用activity.startActionMode(this),它会显示CAB,但不便于检查列表中的项目(我在别处测试过).
如何以编程方式正确处理长按以启动CAB并便于检查列表项?
我正在使用Android开发人员指南主题中提供的方法(他们使用onLongClickListener,我也尝试无效),但它似乎没有用.
android android-listview onlongclicklistener android-listfragment contextual-action-bar
我有一个扩展ListActivity的类,其中列表项响应OnClick事件.添加OnItemLongClickListener不起作用.不调用onItemLongClick()函数(没有日志输出或Toast显示),而是处理正常的OnClick()事件.
我想在长按一下显示上下文操作栏.在新项目中使用我的代码的最小示例工作正常.所以我的问题是:什么可能阻止触发onItemLongClick()触发器?
我的最小API是11.我也将listView设置为longClickable="true".
活动代码(选定的功能):
public class EventListActivity extends ListActivity {
private ArrayList<Event> arrEvents = null;
private ArrayAdapter<Event> adpEvents = null;
private ActionMode mActionMode = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// only create list adapter and set it
arrEvents = new ArrayList<Event>();
adpEvents = new ArrayAdapter<Event>(this, android.R.layout.simple_list_item_activated_2, android.R.id.text1, arrEvents) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
TextView text2 = (TextView) view.findViewById(android.R.id.text2); …Run Code Online (Sandbox Code Playgroud) 我在操作栏中使用橙色主题,在用户尝试复制时编辑文本,粘贴它调用默认蓝色背景的上下文操作,这对用户来说有点奇怪,我可以更改上下文操作栏的背景吗?
我正在尝试使用带有ListView的CAB:
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new ListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
mode.setTitle(getString(R.string.list_selector_num_items_selected, listView.getCheckedItemCount()));
Log.i("LIST",position + " selected");
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return true;
}
... and so on
Run Code Online (Sandbox Code Playgroud)
这将创建具有默认ActionBar的CAB,该ActionBar与我在AppTheme中的此条目一起覆盖工具栏:
<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)
这是工作但它看起来不是很好.
如果您长按电子邮件,我想要实现的目标与当前的Gmail应用程序类似.
任何想法如何实现这一目标?
我正在使用SupportActionBar:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
}
Run Code Online (Sandbox Code Playgroud) android android-appcompat android-support-library contextual-action-bar android-actionbar-compat
我SherlockActionBar在我的应用程序中使用,但在我开始使用appcompat之后.并得到错误
" startActionMode(ActionMode.Callback)Activity类型中的方法不适用于参数(PageFragment.ActionModeCallback)"
在原始
mActionMode = getActivity().startActionMode(new ActionModeCallback());
Run Code Online (Sandbox Code Playgroud)
请帮助我,我做错了什么?
android android-appcompat android-actionbar contextual-action-bar android-actionbaractivity