问题描述
我正在使用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背景颜色设为透明!