web-dev-qa-db-fra.com

Le menu de la barre d'outils Android n'est pas affiché

J'essaie d'ajouter un menu à la barre d'outils. La méthode onCreateOptionsMenu de ma Activity est appelée, mais aucun menu ne s'affiche.

C'est dashboard.xml (à partir du dossier menu)

<?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"
      xmlns:tools="http://schemas.Android.com/tools"
      tools:context="com.app.Android.ui.dashboard.DashboardActivity">

    <item
        Android:id="@+id/action_scan_qr"
        Android:icon="@drawable/ic_drawer"
        Android:title="@string/menu_scan_qr"
        app:showAsAction="always" />
</menu>

REMARQUE: l’icône de ce menu est plus sombre que la couleur d’arrière-plan de la barre d’action, elle devrait donc être visible.

Menu de gonflage dans l'activité:

public class DashboardActivity extends ActionBarActivity {

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.dashboard, menu);

    return true;
}

Et le thème principal de l'application:

<style name="Theme.Application.Base" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@Android:color/white</item>
        <item name="colorPrimaryDark">@Android:color/white</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="drawerArrowStyle">@style/Theme.Application.DrawerArrowStyle</item>
        <item name="Android:textColorSecondary">@Android:color/darker_gray</item>
</style>

Pourquoi onCreateOptionsMenu est appelé mais le menu n'apparaît pas. J'utilise appcompat-v7:21.0.3

MODIFIER:

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentViewId());

        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        if (toolbar == null) {
            throw new Error("Can't find tool bar, did you forget to add it in Activity layout file?");
        }

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }
25
Procurares

Je ne sais pas pourquoi, mais quand je place tout ce qui concerne le menu en gonflant dans la méthode onPrepareOptionsMenu, tout fonctionne bien.

@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.dashboard, menu);

    return super.onCreateOptionsMenu(menu);
}
25
Procurares

J'étais également confronté au même problème, mais l'erreur réelle était, j'ai oublié d'introduire la barre d'outils dans l'activité Java

sous AppCompactActivity, sous la méthode create, définissez votre barre d'outils par id et appelez setSupportActionBar(ToolBar);

Exemple est ci-dessous:

public class secondActivity extends AppCompatActivity {

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
29
Shubham

Essayez ce qui suit:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:tools="http://schemas.Android.com/tools"
      xmlns:app="http://schemas.Android.com/apk/res-auto"
      tools:context="com.example.lolipoptest.MainActivity" >

<item
    Android:id="@+id/action_settings"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_settings"/>
</menu>

et le code Java:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
8
Akash

Avez-vous une barre d’outils dans votre tableau de bord? Appelez setSupportActionBar (barre d'outils) dans votre activité. Utilisez le thème Theme.AppCompat.NoActionBar pour les activités (si vous y utilisez la barre d'outils)

import Android.os.Bundle;
import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.widget.Toolbar;
import Android.view.Menu;

public class DashboardActivity extends ActionBarActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  getSupportActionBar().setHomeButtonEnabled(true);
}

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.dashboard, menu);
  return super.onCreateOptionsMenu(menu);
 }

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

Vérifiez vos styles.

<resources>

<!-- Base application theme. -->
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="Android:windowBackground">@color/white</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme" parent="AppTheme.Base">

</style>

<style name="ToolbarTheme" parent="AppTheme" >
</style>

<color name="light">#FFBB33</color>
<color name="colorPrimary">#FFBB33</color>
<color name="textColorPrimary">#FFBB33</color>
<color name="colorPrimaryDark">#FF8800</color>
<color name="colorAccent">#ff9977</color>
<color name="white">#ffffff</color>

</resources>

Vérifiez votre mise en page.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    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="wrap_content"
    Android:minHeight="?attr/actionBarSize"
    app:titleMarginStart="20dp"
    Android:paddingRight="10dp"
    Android:background="@color/colorPrimaryDark"
    app:theme="@style/ToolbarTheme" />

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="15dp"
    Android:text="Hello Toolbar" />

</LinearLayout>

Ajouter un thème dans votre activité dans le manifeste

Android:theme="@style/AppTheme"
6
Sujith

Essayez de changer:

 ....
xmlns:app="http://schemas.Android.com/apk/res-auto" >
 ....
app:showAsAction="ifRoom" 

à:

 ....
xmlns:yourapp="http://schemas.Android.com/apk/res-auto" >
 ....
yourapp:showAsAction="ifRoom" 

https://developer.Android.com/training/basics/actionbar/adding-buttons.html

2
Yvette Colomb

Si vous gonflez votre menu à partir d’un fragment, par exemple en surchargeant la méthode onCreateOptionsMenu, veillez à appeler setHasOptionsMenu(true) dans onCreateView de votre fragment

1
egorikem

Vous devez gonfler votre menu dans onCreateOptionsMenu de l'activité:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu, menu);
        return super.onCreateOptionsMenu(menu);
    }
1
j2emanue

Ajoutez l'icône que vous voulez dans le dossier mipmap

 ic_menu_options

Créer menu_analysis.xml (sous menu folder values.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"
    xmlns:tools="http://schemas.Android.com/tools"
    tools:context="com.app.Android.ui.dashboard.DashboardActivity">
         <item
            Android:id="@+id/action_scan_qr"
            Android:icon="@mipmap/ic_menu_options"
            Android:title=""
            app:showAsAction="always" />
</menu>

Maintenant onPrepareOptionMenu sous votre classe Java

@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu_analysis, menu);
    return super.onCreateOptionsMenu(menu);
}
0
Tarit Ray

J'avais écrit comme,

MenuInflater(this).inflate(R.menu.my_menu, menu)

Mais, j'ai changé le code comme,

menuInflater.inflate(R.menu.my_menu, menu)

et ça a fonctionné!

(J'utilise kotlin et ce code a été écrit dans l'activité)

0
david

Utilisez setSupportActionBar (barre d'outils) dans la méthode onCreate.

0
Fahad Ali

Dans mon cas, c'était simple et stupide… .. Ma barre d'outils était un enfant d'AppBarLayout et, pour une raison quelconque, lorsque je définissais une barre d'outils avec une disposition Constraint, le paramètre layout_width xml de la barre d'outils était défini sur 0dp. Donc, la barre d’outils était là, mais invisible ... (> _ <)

Donc, si rien d’en haut ne vous a aidé, vérifiez simplement les paramètres "layout_width" et "layout_height".

J'espère que cela fera gagner du temps à quelqu'un :)

Le problème est résolu lorsque je l'ai changé en application: showAsAction en Android: showAsAction

0
messi

Bien que la réponse acceptée fonctionne, mes éléments de menu sont rendus deux fois. Comme je viens de travailler autour de cela, essayez quelque chose comme: 

  1. rappelez-vous de return true; au lieu de super.onCreateOptionsMenu(menu); 
  2. n'oubliez pas de définir la barre d'action de support setSupportActionBar(findViewById(R.id.toolbar))
  3. Vous voudrez peut-être désactiver le titre de l'application par défaut si vous utilisez la barre d'outils personnalisée: getSupportActionBar().setDisplayShowTitleEnabled(false)
0
Lê Vũ Linh