Search code examples
c#androidvisual-studioxamarinxamarin.android

Why icons dont show in toolbar?


I'am creating simple app with toolbar as a menu. Unfortunately icons don't show and i ask you for help. Probably problem is in styles.xml. And yes I've checked lots of similar questions and still in trouble. Maybe toolbar conflicts with ActionBar. Not sure. Here is my code: menu xml file:

<?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/menu_create"
       android:icon="@drawable/baseline_add_24"
       android:showAsAction="always"
       android:title="Создать" 
       android:orderInCategory="1"/>
  <item
       android:id="@+id/menu_edit"
       android:icon="@drawable/baseline_create_24"
       android:showAsAction="always"
       android:title="Редактировать" 
       android:orderInCategory="2"/>
  <item
       android:id="@+id/menu_delete"
       android:showAsAction="always"
       android:icon="@drawable/baseline_delete_sweep_24"
       android:title="Удалить" 
       android:orderInCategory="3"/>
  <item android:id="@+id/menu_save"
       android:showAsAction="ifRoom"

       android:title="Сохранить"
       android:orderInCategory="4"/>
  <item android:id="@+id/menu_cancel"
      android:showAsAction="ifRoom"

      android:title="Отмена"
      android:orderInCategory="5"/>
</menu>

MainActivity.cs It isn't full because all actions on toolbar are doing in OnCreate.

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Android.Support.V7.Widget;
using OrgDatabase1;
using Android.Database;
using Toolbar = Android.Support.V7.Widget.Toolbar;
using DatabaseService;
using Android.Util;

namespace FinallyApp
{
    [Activity(MainLauncher = true)]
    public class MainActivity : AppCompatActivity, BottomNavigationView.IOnNavigationItemSelectedListener
    {
        TextView textMessage;
        BottomNavigationView navigation;

        ICursor cursor;
        RecyclerView mRecyclerView;
        RecyclerView.LayoutManager mLayoutManager;
        NoteAlbumAdapter mAdapter;
        Toolbar toolbar;
        int current_section;
        DBConnectionServiceConnection Dbconnection;

        protected override void OnCreate(Bundle bundle)
        {

            base.OnCreate(bundle);
            Xamarin.Essentials.Platform.Init(this, bundle);
            SetContentView(Resource.Layout.activity_main);
            textMessage = FindViewById<TextView>(Resource.Id.message);
            navigation = FindViewById<BottomNavigationView>(Resource.Id.navigation);
            navigation.SetOnNavigationItemSelectedListener(this);
            mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerView);
            mLayoutManager = new LinearLayoutManager(this);
            mRecyclerView.SetLayoutManager(mLayoutManager);
            StartService(new Intent(this, typeof(DBConnectService)));
            toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);
            SetTitle(Resource.String.title_note);
            toolbar.SetBackgroundResource(Resource.Color.NoteMainColor);
        }
public override bool OnCreateOptionsMenu(IMenu menu)
        {
            MenuInflater.Inflate(Resource.Menu.top_menus, menu);
            var delete_item = menu.FindItem(Resource.Id.menu_delete);
            delete_item.SetVisible(false);
            var edit_item = menu.FindItem(Resource.Id.menu_edit);
            edit_item.SetVisible(false);
            var save_item = menu.FindItem(Resource.Id.menu_save);
            save_item.SetVisible(false);
            var cancel_item = menu.FindItem(Resource.Id.menu_cancel);
            cancel_item.SetVisible(false);
            return base.OnCreateOptionsMenu(menu);
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case Resource.Id.menu_create:
                    current_section = navigation.SelectedItemId;
                    switch (current_section)
                    {
                        case Resource.Id.navigation_note:
                            var intent = new Intent(this, typeof(CreationActivity));
                            intent.PutExtra("CreationType", "Note");
                            StartActivity(intent);                           
                            return true;
                        case Resource.Id.navigation_todo:
                            var intent2 = new Intent(this, typeof(CreationActivity));
                            intent2.PutExtra("CreationType", "Todo");
                            StartActivity(intent2);
                            return true;
                        case Resource.Id.navigation_event:
                            var intent3 = new Intent(this, typeof(CreationActivity));
                            intent3.PutExtra("CreationType", "Event");
                            StartActivity(intent3);
                            return true;
                    }
                    return true;
            }
            return base.OnOptionsItemSelected(item);
        }
}
}

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorAccent">@color/colorAccent</item><item name="android:colorButtonNormal">#ff84ffff</item>
    </style>
</resources>

Solution

  • Looks like it's because you used the wrong schema, try replace all

    android:showAsAction=...
    

    with

    app:showAsAction=...
    

    it's working on my side, hope it helps.