Меню панели инструментов недоступно для Android API 19

#android #android-toolbar

#Android #android-панель инструментов

Вопрос:

Я пытаюсь заставить мое приложение для Android работать с несколькими версиями и столкнулся с пробкой с API 19. У меня есть панель инструментов, на которую нельзя щелкнуть. Панель инструментов отображается, но нажатие не срабатывает. Приложение отлично работает для API 21 и 23. Я также замечаю, что просмотр пейджера также недоступен, но салфетки работают. Не уверен, что я делаю неправильно…

Панель инструментов:

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@ id/toolbarGeneral"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/AppTheme.AppBarOverlay"
app:popupTheme="@style/AppTheme.PopupOverlay" />
  

Стиль:

 <resources>
  <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBarOverlay">false</item>
 </style>
 <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBarOverlay">true</item>
 </style>
</resources>
  

MainActivity:

  public class MasterActivity : AppCompatActivity, View.IOnClickListener//, Android.Support.V4.App.FragmentActivity
{

    //private XmppClient _xmppClient;
    private ViewPager _mViewPager;
    //private bool _shouldImportContact;
    //private bool _shouldInitialiseSystem;
    private AppCompatActivity _context;
    private MasterPageChangeListener _pageChangeListener;
    private IMenuItem _editMenu;
    private SQLiteConnection _dbConnection;
    private int _fragmentPos;
    private Android.Support.V4.App.Fragment[] _masterFragments;
    private CRUDRepository<FacebookInfo> _facebookCRUD;
    private FacebookInfo _facebookInfo;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        _facebookInfo = new FacebookInfo();
        _facebookCRUD = new CRUDRepository<FacebookInfo>();
        _fragmentPos = Intent.GetIntExtra("FragmentPos", 0);
        _dbConnection = SQLiteHelper.GetConnection();
        try
        {
            _context = this;

            SetContentView(Resource.Layout.Master); //Set view the Master view

            Toolbar.Toolbar toolbar = FindViewById<Toolbar.Toolbar>(Resource.Id.toolbar);
            this.SetSupportActionBar(toolbar);


            _mViewPager = FindViewById<ViewPager>(Resource.Id.viewPager);
            _mViewPager.Adapter = new MasterAdapter(base.SupportFragmentManager, _masterFragments, titleLabels);

            _mViewPager.SetCurrentItem(_fragmentPos, true);

            TabLayout tabLayout = FindViewById<TabLayout>(Resource.Id.tabs);
            tabLayout.SetupWithViewPager(_mViewPager);

            FloatingActionButton fab = FindViewById<FloatingActionButton>(Resource.Id.fab);
            fab.SetOnClickListener(this);

            //Create the pageChangeListener class so that the page selected is known
            _pageChangeListener = new MasterPageChangeListener(this, _mViewPager);
            _mViewPager.AddOnPageChangeListener(_pageChangeListener);


        }
        catch (Exception Ex)
        {
            var data = Ex.Message;
        }

    }
  

onPrepareOptionsMenu и onCreateOptionsMenu:

  public override bool OnPrepareOptionsMenu(IMenu menu)
    {

        if (_pageChangeListener.tabPosition == 0)
            _editMenu.SetVisible(true);
        else if (_pageChangeListener.tabPosition == 1 || _pageChangeListener.tabPosition == 2)
            _editMenu.SetVisible(false);
        return base.OnPrepareOptionsMenu(menu);          
    }


    public override bool OnCreateOptionsMenu(IMenu menu)
    {
        base.OnCreateOptionsMenu(menu);
        var inflater = MenuInflater;
        inflater.Inflate(Resource.Menu.menu, menu);
        _editMenu = menu.FindItem(Resource.Id.action_add);
        return true;
    }
  

Комментарии:

1. Не могли бы вы, пожалуйста, сузить свой код. Не сбрасывайте здесь все , только соответствующие части….

2. Как сузить его? Я разбил код на биты: Toolbar.xml , style.xml , mainactivity только с Oncreate, а также с 2 функциями меню.

Ответ №1:

Проблема напрямую связана с этим:

1) Вам необходимо правильно определить app: , чтобы xmlns:app="http://schemas.android.com/apk/res-auto" вместо xmlns:app="http://schemas.android.com/apk/lib-auto"

2) Вам нужно изменить слово app:layout_behaviour на app:layout_behavior

Не стесняйтесь редактировать свой исходный вопрос с соответствующим кодом, чтобы этот ответ имел больше смысла! (Поскольку больше исходного кода было раскрыто в личке)