标签: android-actionmode

如何在ActionMode内更改TextView的背景颜色

TextView的操作栏位于内部,如下所示:

非动作模式图片

我已将逻辑配置为在我长按关联的项目时使其Toolbar与重叠。最终结果如下所示:ActionModeListView

动作模式图片

除了TextView标题中令人讨厌的背景,这基本上是正确的ActionMode

从更改文件Widget.ActionMode样式styles.xml到实际将设置actionModeStyle为特定样式,我已经做了很多尝试。TextView不过,似乎没有任何影响。

我已通读过如何在Android中更改ActionMode背景颜色,但是我所做的任何事情似乎都不会对此背景产生影响。

注意:如果有某种方法可以在渲染时查看Android设备上的样式层次结构,那就太好了。层次结构查看器为我提供了大约1/3的方式,但是它没有任何样式信息。有人知道我可以用来调试此问题的工具吗?

styles.xml(仅相关内容):

<style name="Material" parent="Theme.AppCompat.Light">
    <item name="textHeaderMaxLines">@integer/text_header_max_lines</item>
    <item name="trackAbstractMaxLines">@integer/track_abstract_max_lines</item>
    <item name="activatableItemBackground">@drawable/activatable_item_background</item>

    <!-- ActionMode Styles -->
    <item name="android:windowActionModeOverlay">true</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="actionModeBackground">@color/app_green_dark</item>
</style>
<style name="Material.AppBar" parent="Theme.AppCompat.NoActionBar">
    <item name="android:textColorPrimaryInverse">@android:color/white</item>
    <item name="android:actionMenuTextColor">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
    <item name="android:background">@color/app_green</item>
    <item name="android:color">@android:color/white</item>
    <item name="android:textColor">@android:color/white</item>
</style>
<style name="Material.AppBar.ActionMode" parent="Widget.AppCompat.Light.ActionMode.Inverse">
    <item name="android:background">@color/app_green_dark</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android styles android-actionbar android-actionmode

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

在ActionMode中,appcompat-v7 v23.0.0状态栏颜色为黑色

UPDATE

最新的Gmail应用中存在同样的问题.我仍然不明白为什么谷歌会做出如此令人不快的用户界面改变.每当我看到它时,对我的执着都会变得疯狂

我有这个奇怪的问题与appcompat-v7 23.问题我将描述22系列不会发生

你可以获得重现这个issuse形式的源代码 https://github.com/devserv/t/ 一旦构建,你可以点击并按住列表中的项目来激活ActionMode

问题:

在ActionMode中,appcompat将状态栏变为黑色.如果我不使用以下内容,则不会发生这种情况

<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
Run Code Online (Sandbox Code Playgroud)

在我的v21风格,但我必须使用它,因为我希望我的导航抽屉看到状态栏后面.


当ActionMode开始和结束时,我曾经使用以下来避免黑色状态栏

 public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getActivity().getWindow().setStatusBarColor(getResources().getColor(R.color.appColorPrimaryDark));
    }
Run Code Online (Sandbox Code Playgroud)

}

 public void onDestroyActionMode(ActionMode actionMode) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getActivity().getWindow().setStatusBarColor(getResources().getColor(android.R.color.transparent));
     }

    mMode = null;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码没有创建/避免状态栏变黑,但在appcompat的v23上无法正常工作.相反,当ActionMode被破坏时,您会看到一个短的黑色状态栏.它看起来与ActionMode销毁时播放的动画有关.

我试图打开错误报告,但它已被拒绝评论

Don't re-create bugs.
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

以下是正常和动作模式的屏幕截图

正常 在此输入图像描述

在ActionMode中 在此输入图像描述

android android-appcompat android-actionmode

5
推荐指数
2
解决办法
2302
查看次数

是否可以在 Marshmallow 之前的 Android 版本中创建自定义浮动文本选择菜单?

我正在寻找为文本选择创建一个自定义菜单。我知道可以使用 setCustomSelectionActionModeCallback 编辑操作栏的行为,但在我的情况下,我根本不希望该操作栏显示,我想要自己已经实现的浮动自定义菜单。

唯一的问题是在 TextView 中选择文本后,无法不显示操作栏菜单。

我需要的行为不是标准的剪切/复制/粘贴,我实施的操作是用于突出显示文本的突出显示部分并将其保存到数据库中。

我做了一些修补,我能做的最好的事情是一个凌乱的反射想法,我在 onCreateActionMode 返回 false 并通过反射获得对文本选择句柄的引用。它成功了一半,而且效果很好,因为在这种情况下,任何形式的反射都是非常糟糕的做法。

我希望最后一个支持库在 6.0 中包含浮动文本菜单,虽然我可以在该菜单中实现我自己的自定义视图,但这是一厢情愿的想法。

如果有人有任何可能有用的想法或库,那么我全神贯注。

android textselection android-edittext android-actionmode android-6.0-marshmallow

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

在TextView CustomActionModeCallback上选择溢出菜单项

我想在长按文本视图的同时呈现自定义操作栏.我的菜单有超过5个项目,导致某些项目出现在溢出菜单下.

当我按下溢出图标时,操作栏被破坏,我无法选择溢出内的任何项目.

    ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.add_rule_menu, menu);
            return true;
        }

        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            for (int i = 0; i < menu.size(); i++) {
                MenuItem item = menu.getItem(i);
                if (!mOptionsList.contains(item.getItemId()))
                    item.setVisible(false);
            }
            return false;
        }

        // Clicking on overflow button does not trigger this method at all.
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
             // Rest of the code
            } …
Run Code Online (Sandbox Code Playgroud)

android textview android-actionmode overflow-menu

4
推荐指数
1
解决办法
664
查看次数

在Android中以编程方式触发操作栏菜单项

我在栏上有菜单项的操作栏.当我点击刷新图标时,我有显示进度条的方法.

我想加载这个活动.因此,我尝试以编程方式单击调用刷新图标项:

onOptionsItemSelected(menu.findItem(R.id.action_Refresh)); 
Run Code Online (Sandbox Code Playgroud)

我在创建菜单后调用上面的内容.

但这会在加载我的数据时给出空指针异常.如果我点击刷新按钮它工作正常,但如果我以编程方式调用它我会收到错误.

这是我有的:

 @Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    this.optionsMenu = menu;
    getMenuInflater().inflate(R.menu.main, menu);

    onOptionsItemSelected(menu.findItem(R.id.action_Refresh));

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId()) 
    {
    case R.id.action_about:
        aboutapp();
        return true;

    case R.id.action_Refresh:
        Log.e("REfressh","Clicked");
        Mapsthree.refreshValue = 0;
        timer = new Timer();
        timerMethod();
        setRefreshActionButtonState(true);
        displayView(1);
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

private void timerMethod()
{
    timer.scheduleAtFixedRate(new TimerTask() 
    {
        @Override
        public void run() 
        {
            updateProgressBar();
        }

    }, 0, 800);
}

private void updateProgressBar() 
{
    runOnUiThread(new Runnable() 
    { …
Run Code Online (Sandbox Code Playgroud)

android selection android-actionbar actionmode android-actionmode

4
推荐指数
1
解决办法
4867
查看次数

如何在动作模式下更改文本/图标颜色?

首先,我正在尝试很多我在这里找到的例子,但任何事都适合我.

目前,我只能更改动作模式的颜色背景,但不能更改文本颜色和图标的颜色以便返回

一些帮助将不胜感激!

这就是我正在尝试的:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeStyle">@style/Style.ActionMode</item>
    </style>

<!-- *************************** Custom ActionMode Bar **************************************-->
    <style name="Style.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
        <item name="background">@color/color_action_mode_bg</item>
        <item name="android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
        <item name="android:height">?android:attr/actionBarSize</item>
        <item name="android:titleTextStyle">@style/Stl.TitleTextStyle</item>
    </style>

    <style name="Stl.TitleTextStyle" parent="@style/Widget.AppCompat.ActionMode">
        <item name="android:textColor">@color/colorPrimary</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

android android-actionmode

4
推荐指数
1
解决办法
3480
查看次数

选择textview时如何显示弹出窗口而不是CAB?

我正在制作一个阅读应用程序,它有一个全屏活动.
当用户选择文本的一部分时,会contextual action bar出现复制选项.这是默认行为.但是此操作栏会阻止其下的文本,因此用户无法选择它.

我想显示一个如下所示的弹出窗口.
在此输入图像描述

我试图返回falseonCreateActionMode,但是当我这样做,我不能选择文本两种.

我想知道是否有一种标准的方法来实现这一点,因为许多阅读应用程序都使用这种设计.

android textview android-actionmode android-popupwindow

4
推荐指数
1
解决办法
897
查看次数

对于FragmentActivity类型,方法startSupportActionMode(ActionMode.Callback)是未定义的?

我想在Fragment Android中实现Action Mode Compact.但是我收到错误我的代码中的FragmentActivity类型未定义方法startSupportActionMode(ActionMode.Callback):

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                    getActivity().startSupportActionMode(modeCallBack);

                    return true;
                }
        });
Run Code Online (Sandbox Code Playgroud)

getActivity().startSupportActionMode(modeCallBack);如何解决它会得到错误?

android android-fragments android-actionmode

3
推荐指数
1
解决办法
7759
查看次数

ActionMode自定义背景

我们怎样才能改变布局或背景ActionMode?有方法actionMode.getCustomView();但总是返回null.有什么建议吗?

android android-layout android-actionmode

2
推荐指数
1
解决办法
3025
查看次数

我的ActionMode不会使onCreateActionMode方法中的菜单膨胀

我正在尝试通过ActionMode在ActionBar中显示一个菜单项,但是ActionMode和菜单项都没有显示.

在ProvasActivity上创建ListView的LongClickListener.

    this.listView.setLongClickable(true);
    this.listView.setOnItemLongClickListener(new OnItemLongClickListener() {
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            Log.d(null, "ListView Pressionado");

            // O action mode está ativado no momento?
            if (mActionMode != null) {
                // Cancela o evento
                return false;
            }
            selectedItem = position;

            mActionMode = ProvasActivity.this
                    .startActionMode(mActionModeCallback);
            view.setSelected(true);
            return true;
        }
    });

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {

            // Infla o recurso do menu a ser exibido
            MenuInflater inflater = mode.getMenuInflater(); …
Run Code Online (Sandbox Code Playgroud)

android android-actionbar android-actionmode

2
推荐指数
1
解决办法
2669
查看次数