片段上的动作模式背景问题

问题描述

我正在使用3个带有TabLayout和工具栏的片段,并且在每个片段上都可以选择一个项目来显示动作模式。每个片段都有不同的样式,带有不同颜色的“ ActionModeBackground”,但没有效果。 我的问题是,一旦我在片段上打开动作模式,它将采用正确的颜色,但是一旦通过更改片段然后在另一个片段上打开关闭该动作模式,该动作模式将具有与以前相同的颜色,而我希望根据片段进行更改。附加图片 谢谢您的帮助

styles.xml

<!--    Fragment 1 Theme-->
<style name="AppTheme1" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/bleuEnCours</item>
    <item name="colorPrimaryDark">@color/bleuEnCours</item>
    <item name="colorAccent">@color/bleuEnCours</item>
    <item name="android:colorEdgeEffect">@color/bleuEnCours</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="actionModeBackground">@color/bleuEnCours</item>
    <item name="checkBoxStyle">@style/Widget.AppCompat.CompoundButton.CheckBox</item>
    <item name="colorError">@color/error</item>
    <item name="actionModeCloseDrawable">@drawable/action_mode_cancel</item>
</style>

<!--    Fragment 2 Theme-->
<style name="AppTheme2" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/vertTermine</item>
    <item name="colorPrimaryDark">@color/vertTermine</item>
    <item name="colorAccent">@color/vertTermine</item>
    <item name="android:colorEdgeEffect">@color/vertTermine</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="actionModeBackground">@color/vertTermine</item>
    <item name="tabSelectedTextColor">@color/vertTermine</item>
    <item name="checkBoxStyle">@style/Widget.AppCompat.CompoundButton.CheckBox</item>
    <item name="colorError">@color/error</item>
    <item name="actionModeCloseDrawable">@drawable/action_mode_cancel</item>
</style>

我在 MainActivity.java 中强制使用样式:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    viewPager2 = findViewById(R.id.viewpager_id);
    setupViewPager(toolbar);

    tabLayout = findViewById(R.id.tablayout_id);
    new TabLayoutMediator(tabLayout,viewPager2,(tab,position) -> tab.setText(listTitles.get(position))).attach();
    
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager2.setCurrentItem(tab.getPosition(),true);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                if (tab.getPosition() == 0){
                    toolbar.setBackgroundColor(ContextCompat.getColor(MainActivity.this,R.color.bleuEnCours));
                    tabLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this,R.color.bleuEnCours));
                    getwindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.bleuEnCours));
                    getTheme().applyStyle(R.style.AppTheme1,true);

                } else if (tab.getPosition() == 1){
                    toolbar.setBackgroundColor(ContextCompat.getColor(MainActivity.this,R.color.vertTermine));
                    tabLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this,R.color.vertTermine));
                    getwindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.vertTermine));
                    getTheme().applyStyle(R.style.AppTheme2,true);
                } else {
                    toolbar.setBackgroundColor(ContextCompat.getColor(MainActivity.this,R.color.rougeARenvoyer));
                    tabLayout.setBackgroundColor(ContextCompat.getColor(MainActivity.this,R.color.rougeARenvoyer));
                    getwindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.rougeARenvoyer));
                    getTheme().applyStyle(R.style.AppTheme3,true);
                }
            }
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

每个片段都有自己的 ActionMode.Callback 在我的课程中实现:

Toolbar_ActionMode_Callback_En_Cours.java:

public abstract class Toolbar_ActionMode_Callback_En_Cours implements ActionMode.Callback {
private ActionMode actionMode;
private MenuItem editItem;
private MenuItem deleteItem;
private MenuItem shareItem;
private MenuItem moveto;


@Override
public boolean onCreateActionMode(ActionMode mode,Menu menu) {
    mode.getMenuInflater().inflate(R.menu.menu_select_en_cours,menu);
    this.actionMode = mode;
    this.editItem = menu.findItem(R.id.action_edit_product);
    this.shareItem = menu.findItem(R.id.action_share_product);
    this.deleteItem = menu.findItem(R.id.action_delete_products);
    this.moveto = menu.findItem(R.id.action_move_product_to_a_renvoyer);
    return true;
}

@Override
public boolean onActionItemClicked(ActionMode actionMode,MenuItem menuItem) {
    return false;
}

@Override
public boolean onPrepareActionMode(ActionMode mode,Menu menu) {
    return false;
}

@Override
public void onDestroyActionMode(ActionMode mode) {
    actionMode = null;
}

public void setCount(String checkedCount) {
    actionMode.setTitle(checkedCount);
}


public void changeEditItemVisible(boolean b){
    editItem.setVisible(b);
}

public void changeMovetoVisible(boolean b){
    moveto.setVisible(b);
}

public void changeShareItemVisible(boolean b){
    shareItem.setVisible(b);
}

public ActionMode getActionMode() {
    return actionMode;
}

}

Toolbar_ActionMode_Callback_Termine.java

public abstract class Toolbar_ActionMode_Callback_Termine implements ActionMode.Callback {
private ActionMode actionMode;
private MenuItem editItem;
private MenuItem deleteItem;
private MenuItem moveto;
private MenuItem shareItem;


@Override
public boolean onCreateActionMode(ActionMode mode,Menu menu) {
    mode.getMenuInflater().inflate(R.menu.menu_select_termine,menu);
    this.actionMode = mode;
    this.editItem = menu.findItem(R.id.action_edit_product);
    this.deleteItem = menu.findItem(R.id.action_delete_products);
    this.moveto = menu.findItem(R.id.action_move_product_to_en_cours);
    this.shareItem = menu.findItem(R.id.action_share_product);
    return true;
}

@Override
public boolean onActionItemClicked(ActionMode actionMode,Menu menu) {
    return false;
}

@Override
public void onDestroyActionMode(ActionMode mode) {
    actionMode = null;
}



public void setCount(String checkedCount) {
    actionMode.setTitle(checkedCount);
}

public void changeEditItemVisible(boolean b){
    editItem.setVisible(b);
}

public void changeMovetoVisible(boolean b){
    moveto.setVisible(b);
}

public void changeShareItemVisible(boolean b){
    shareItem.setVisible(b);
}

public ActionMode getActionMode() {
    return actionMode;
}

}

解决方法

解决了将ActionMode背景颜色设为透明!