3 votes

Les éléments de menu de la barre d'outils Android restent vides

Mon application Android a un Toolbar à laquelle je veux ajouter des éléments de menu. La barre d'outils s'affiche correctement, mais lorsque l'on développe le menu, les éléments du menu sont nuls.

android toolbar menu item is void

La structure du menu est définie dans toolbar_menu.xml :

toolbar_menu.xml

<menu 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/about"
        android:title="About"
        app:showAsAction="never"/>
</menu>

L'activité définit la barre d'outils dans le fichier de mise en page activity_layout.xml

activity_layout.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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="visible"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:title="Welcome"/>

    <!-- other widgets follow -->

</androidx.constraintlayout.widget.ConstraintLayout>

Et la classe d'activité dans laquelle j'ai défini la barre d'outils est la suivante MainActivity.java

MainActivity.java

// import dependencies

public class MainActivity extends AppCompatActivity {

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

        final Toolbar toolbar = (Toolbar) this.findViewById(R.id.toolbar);
        this.setSupportActionBar(toolbar);
    }

    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        this.getMenuInflater().inflate(R.menu.toolbar_menu, menu);
        return true;
    }
}

1voto

JCvanDamme Points 165

Grâce au commentaire de @GabrieleMariotti ci-dessous j'ai réalisé que le problème et la solution sont les mêmes que https://stackoverflow.com/a/63279563/4275167 .

J'utilise un thème personnalisé Theme.Deck.NoActionBar qui hérite de Theme.MaterialComponents.DayNight.DarkActionBar .

thèmes.xml

<style name="Theme.Deck" parent="Theme.MaterialComponents.DayNight.DarkActionBar">...</style>

<style name="Theme.Deck.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:itemTextAppearance">@style/menuItem</item> <!-- added to solve the problem -->
</style>

styles.xml

<!-- added to solve the problem -->
<style name="menuItem" parent="Widget.AppCompat.TextView.SpinnerItem">
    <item name="android:textColor">@color/black</item>
</style>

1voto

Gabriele Mariotti Points 7243

Le problème est la couleur du texte dans le menu contextuel.
Ajouter le app:popupTheme dans votre Toolbar .

    <androidx.appcompat.widget.Toolbar
        app:popupTheme="@style/AppTheme.PopupOverlay" 
        ../>

avec :

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.DayNight.ActionBar" >
    <item name="android:textColor">@color/...</item>  
</style>

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X