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);
}
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);
}
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);
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;
}
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"
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
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
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);
}
Ajoutez l'icône que vous voulez dans le dossier mipmap
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);
}
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é)
Utilisez setSupportActionBar (barre d'outils) dans la méthode onCreate.
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
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:
return true;
au lieu de super.onCreateOptionsMenu(menu);
setSupportActionBar(findViewById(R.id.toolbar))
getSupportActionBar().setDisplayShowTitleEnabled(false)