#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
Не стесняйтесь редактировать свой исходный вопрос с соответствующим кодом, чтобы этот ответ имел больше смысла! (Поскольку больше исходного кода было раскрыто в личке)