标签: android-actionmode

在没有ActionBarSherlock的Actionbar ShareActionProvider上设置自定义共享图标

遇到了与此处描述的相同的问题 - 在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

6
推荐指数
1
解决办法
1962
查看次数

更改ActionMode溢出图标

有没有办法更改ActionMode Overflow图标而不更改"普通"ActionBar的图标?

android android-actionbar android-actionmode

6
推荐指数
2
解决办法
5855
查看次数

如何动画ActionBar的ActionMode背景?

背景

可以更改操作栏的背景,甚至可以在两种颜色之间进行动画处理,如下所示:

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的视图,或者更确切地说,如何使用动画更改其背景?

android background android-actionbar android-actionmode

6
推荐指数
1
解决办法
2424
查看次数

Android:使用工具栏在AppCompat-v7上设置样式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

6
推荐指数
1
解决办法
4126
查看次数

android webview:阻止文本选择actionMode actionBar

我想在webView中保留文本选择,同时防止显示actioMode的任何上下文菜单.既不是新浮动的也不是旧的actionBar,只是选择句柄,当然还有选择行为.

挂钩startActionMode中的actionModeCallback允许我清除回调onCreateActionMode中菜单中的所有项目.

这在android 6上工作正常,因为根本不显示空的浮动菜单,并且保留了actionMode文本选择行为.

不幸的是,在android <6这会留下一个空的actionBar,如何完全删除它?

有没有一个干净的方法来获得这个?我正在使用ReactNative应用程序,但使用自定义扩展webview,我也可以访问mainActivity代码.

textselection android-webview android-actionbar android-actionmode react-native

6
推荐指数
1
解决办法
1696
查看次数

Android recyclerview-selection实施?

我目前正在尝试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

6
推荐指数
2
解决办法
8884
查看次数

如何动态更改actionModeCloseDrawable图标?

我正在设置actionModeCloseDrawable图标,如下所示

<item name="actionModeCloseDrawable">@drawable/ic_actionbar_back</item>
Run Code Online (Sandbox Code Playgroud)

但我想在特定事件上以编程方式改变它.

有没有办法这样做?

我已经尝试定义两个样式并在运行时更改它,但这也没有用.

android android-actionmode

6
推荐指数
1
解决办法
388
查看次数

无法以任何方式在工具栏顶部显示 actionMode

目前,操作模式工具栏显示在工具栏上方,将整个布局向下移动,我希望它显示在当前工具栏的顶部。我在这篇文章这篇文章中尝试了所有解决方案:

  • 我尝试使用windowActionModeOverlay和不使用android:前缀,没有成功
  • 我都尝试view.ActionModesupport.v7.view.ActionMode,没有成功
  • 我尝试在我的工具栏和我的活动中使用 startActionMode,但都没有奏效。
  • 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)

android android-actionbar android-actionmode

5
推荐指数
1
解决办法
1639
查看次数

ActionMode.Callback 的实现

我有一个 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)

android kotlin android-actionmode android-recyclerview

5
推荐指数
1
解决办法
4597
查看次数

如何在 Jetpack Compose 中实现列表多重选择?

我需要为 实现多选LazyList,当长按列表项时,这也会更改 appBar 内容。

因为ListView我们只需将 choiceMode 设置为CHOICE_MODE_MULTIPLE_MODAL并设置即可做到这一点MultiChoiceModeListener

有没有办法使用 Compose 来做到这一点?

在此输入图像描述

android multi-select android-actionmode android-jetpack-compose

5
推荐指数
1
解决办法
5303
查看次数