我遇到了与此处描述的相同的问题 - 在Actionbar ShareActionProvider上设置自定义共享图标
但是
我没有使用ActionBarSherlock 我发现Sherlock主题使用了" actionModeShareDrawable ",我也可以像这样使用它,如果我不使用的话ActionBarSherlock
<style name="Theme.MyApp" parent="android:Theme.Holo">
<item name="*android:actionModeShareDrawable">@drawable/icon</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这在我的nexus 5上运行正常,但在许多其他设备上失败
所以我的问题是,如何在不使用ActionBarSherlock的情况下更改该图标
android android-xml android-icons android-actionbar android-actionmode
有没有办法更改ActionMode Overflow图标而不更改"普通"ActionBar的图标?
可以更改操作栏的背景,甚至可以在两种颜色之间进行动画处理,如下所示:
public static void animateBetweenColors(final ActionBar actionBar, final int colorFrom, final int colorTo,
final int durationInMs) {
final ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo);
colorAnimation.addUpdateListener(new AnimatorUpdateListener() {
ColorDrawable colorDrawable = new ColorDrawable(colorFrom);
@Override
public void onAnimationUpdate(final ValueAnimator animator) {
colorDrawable.setColor((Integer) animator.getAnimatedValue());
actionBar.setBackgroundDrawable(colorDrawable);
}
});
if (durationInMs >= 0)
colorAnimation.setDuration(durationInMs);
colorAnimation.start();
}
Run Code Online (Sandbox Code Playgroud)
我无法找到一种获取动作模式视图的方法,因此我可以在某些情况下更改其背景(当它显示时).
我发现的只是一种黑客方式,它假定动作模式的id将保持不变,甚至这只适用于"完成"按钮(看起来像"V"的按钮)的视图实际上更像是"取消").
我还发现了如何通过主题更改它,但这不是我需要的,因为我需要以编程方式进行.
如何获取actionMode的视图,或者更确切地说,如何使用动画更改其背景?
我已经使用可选项创建了一个ListView,但ActionMode没有正确显示.(右边有一个"比较"菜单按钮,白色)

我尝试使用以下代码为actionMode设置样式,但没有任何更改.任何想法可能会发生这种情况?我发现如果我直接在工具栏小部件而不是DarkTheme.ActionBar上设置背景颜色,则actionMode上文本的颜色已经消失,但文本的颜色仍然是白色,我还需要使用ActionBar的颜色在主题上定义而不是小部件.
toolbar.xml
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/action_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
app:theme="@style/DarkTheme.ActionBar"
app:popupTheme="@style/DarkTheme.Popup"/>
Run Code Online (Sandbox Code Playgroud)
mytheme.xml
<resources>
<style name="DarkTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item>
<item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item>
<item name="android:textColorSecondary">#ffff8800</item>
<item name="android:textAllCaps">false</item>
<item name="android:background">#303030</item>
</style>
<style name="DarkTheme.Popup" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:textColor">#ffffff</item>
</style>
<style name="DarkTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColor">#101010</item>
<item name="android:textColorLink">#ff0099cc</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:colorPrimaryDark">#000000</item>
<item name="android:navigationBarColor">#000000</item>
<item name="android:textAllCaps">false</item>
<item name="android:actionModeStyle">@style/DarkTheme.ActionMode</item>
</style>
<style name="DarkTheme.ActionMode" parent="Widget.AppCompat.ActionMode">
<item name="android:actionModeBackground">@android:color/black</item>
<item name="android:background">#000000</item>
<item name="android:backgroundSplit">#000000</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud) android android-appcompat android-actionmode android-actionbar-compat android-toolbar
我想在webView中保留文本选择,同时防止显示actioMode的任何上下文菜单.既不是新浮动的也不是旧的actionBar,只是选择句柄,当然还有选择行为.
挂钩startActionMode中的actionModeCallback允许我清除回调onCreateActionMode中菜单中的所有项目.
这在android 6上工作正常,因为根本不显示空的浮动菜单,并且保留了actionMode文本选择行为.
不幸的是,在android <6这会留下一个空的actionBar,如何完全删除它?
有没有一个干净的方法来获得这个?我正在使用ReactNative应用程序,但使用自定义扩展webview,我也可以访问mainActivity代码.
textselection android-webview android-actionbar android-actionmode react-native
我目前正在尝试recyclerview-selection从Android支持库28.0.0-alpha1 实现新的API,并且遇到了一些问题.我的目标是拥有一个RecyclerView能够选择多行,显示上下文操作栏并对其执行操作的功能,例如"删除"或"共享"
我会尝试提供足够的代码来充分了解正在发生的事情,但如果有必要,我总能回复更多.
在我Fragment包含RecyclerView我关注的内容中,我正在启动一个SelectionTracker,并将其设置在我的上面RecyclerView.Adapter,就像这样:
private void buildRecyclerView() {
sheetsAdapter = new SheetsAdapter(getContext(), this, sheets);
gridManager = new GridLayoutManager(getContext(), getResources().getInteger(R.integer.grid_span_count));
ItemOffsetDecoration itemDecoration = new ItemOffsetDecoration(getContext(), R.dimen.item_offset);
sheetsRecycler.addItemDecoration(itemDecoration);
sheetsRecycler.setLayoutManager(gridManager);
sheetsRecycler.setAdapter(sheetsAdapter);
sheetsRecycler.setHasFixedSize(true);
SelectionTracker selectionTracker = new SelectionTracker.Builder<>("sheet_selection",
sheetsRecycler,
new StableIdKeyProvider(sheetsRecycler),
new SheetDetailsLookup(sheetsRecycler),
StorageStrategy.createLongStorage())
.withOnContextClickListener(this)
.build();
sheetsAdapter.setSelectionTracker(selectionTracker);
}
Run Code Online (Sandbox Code Playgroud)
这Fragment也是implements OnContextClickListener为了收听我在我的项目中的长按RecyclerView:
@Override
public boolean onContextClick(@NonNull MotionEvent e) {
if (actionMode != null) {
return false;
}
// …Run Code Online (Sandbox Code Playgroud) android multipleselection android-actionmode android-recyclerview
我正在设置actionModeCloseDrawable图标,如下所示
<item name="actionModeCloseDrawable">@drawable/ic_actionbar_back</item>
Run Code Online (Sandbox Code Playgroud)
但我想在特定事件上以编程方式改变它.
有没有办法这样做?
我已经尝试定义两个样式并在运行时更改它,但这也没有用.
目前,操作模式工具栏显示在工具栏上方,将整个布局向下移动,我希望它显示在当前工具栏的顶部。我在这篇文章和这篇文章中尝试了所有解决方案:
windowActionModeOverlay和不使用android:前缀,没有成功view.ActionMode和support.v7.view.ActionMode,没有成功setContentView之前被调用super.onCreate,这不是问题现在我只是手动设置工具栏可见性,这看起来很糟糕。另外我之前设置了活动主题super.onCreate,这可能是问题吗?如果不是,那是什么?我怎样才能使属性起作用?
我的活动:
import android.support.v7.view.ActionMode;
import android.support.v7.widget.Toolbar;
// import ...
public class FileExplorerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_NoActionBar);
super.onCreate(savedInstanceState);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// ...
}
private void setActionMode(boolean enabled) {
if (enabled) {
actionMode = startSupportActionMode(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = …Run Code Online (Sandbox Code Playgroud) 我有一个 ActionMode 的实现来显示 RecyclerView 中多选项目的数量。
我想知道何时点击actionMode中的后退按钮以便相应地重置recyclerView,但是在实现ActionMode.Callback时,我注意到每当ActionMode更新时都会调用onDestroyActionMode actionMode?.setTitle($selectedItems.size),这使得无法重置recyclerView - 删除选定的项目,删除覆盖颜色并通知 recyclerview 数据集已更改。

这是我的回调
inner class ActionModeCallback : ActionMode.Callback {
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
when (item?.getItemId()) {
R.id.action_delete -> {
myAdapter?.deleteSelectedIds()
actionMode?.setTitle("") //remove item count from action mode.
actionMode?.finish()
return true
}
}
return false
}
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
val inflater = mode?.getMenuInflater()
inflater?.inflate(R.menu.action_mode_menu, menu)
return true
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
menu?.findItem(R.id.action_delete)?.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
return true
}
override fun …Run Code Online (Sandbox Code Playgroud) 我需要为 实现多选LazyList,当长按列表项时,这也会更改 appBar 内容。
因为ListView我们只需将 choiceMode 设置为CHOICE_MODE_MULTIPLE_MODAL并设置即可做到这一点MultiChoiceModeListener。
有没有办法使用 Compose 来做到这一点?
android multi-select android-actionmode android-jetpack-compose