Si vous souhaitez définir la couleur d'un élément de menu individuel, la personnalisation d'un thème de barre d'outils n'est pas la bonne solution. Pour ce faire, vous pouvez utiliser android: actionLayout et une vue d'action pour l'élément de menu.
Créez d'abord un fichier de mise en page XML pour la vue d'action. Dans cet exemple, nous utilisons un bouton comme vue d'action:
menu_button.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/menuButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Done"
android:textColor="?android:attr/colorAccent"
style="?android:attr/buttonBarButtonStyle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Dans l'extrait de code ci-dessus, nous utilisons android:textColor="?android:attr/colorAccent"
pour personnaliser la couleur du texte du bouton.
Ensuite, dans votre fichier de mise en page XML pour le menu, incluez app:actionLayout="@layout/menu_button"
comme indiqué ci-dessous:
main_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menuItem"
android:title=""
app:actionLayout="@layout/menu_button"
app:showAsAction="always"/>
</menu>
Dernière substitution de la onCreateOptionsMenu()
méthode dans votre activité:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.menuItem);
Button saveButton = item.getActionView().findViewById(R.id.menuButton);
saveButton.setOnClickListener(view -> {
// Do something
});
return true;
}
... ou fragment:
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater){
inflater.inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.menuItem);
Button saveButton = item.getActionView().findViewById(R.id.menuButton);
button.setOnClickListener(view -> {
// Do something
});
}
Pour plus de détails sur les vues d'action, consultez le guide du développeur Android .