【发布时间】:2025-12-22 03:15:11
【问题描述】:
我正在使用 3 个片段,带有一个选项卡布局和一个工具栏,并且在每个片段上都可以选择一个项目来显示一个动作模式。每个片段都有不同的样式,带有不同颜色但没有效果的“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) {
}
});
每个 fragment 都有自己的 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, 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;
}
}
【问题讨论】:
标签: java android android-fragments contextual-action-bar android-actionmode