Панель инструментов AppCompat_v7 как панель действий, не отображающая «всегда» действия из меню, но панель инструментов API

После 2 дней борьбы с новой панелью API 21 и appCompat_v7, я думаю, что нашел ошибку. Если в вашем меню есть 2 действия:

<item android:id="@+id/action_test" android:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> 

И панель инструментов appCompat, определенная следующим образом:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.toolbar.MainActivity" > <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="52dp" android:id="@+id/toolbar"> </android.support.v7.widget.Toolbar> </RelativeLayout> 

После раздувания (или установки метода setSupportActionBar)

 Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); toolbar.setTitle("esurance"); setSupportActionBar(toolbar); 

Вы получите меню панели инструментов без значка действия, оно отобразит его в меню переполнения.

Но, если вы используете класс панели инструментов из API 21, он покажет ваши действия, как определено в вашем макете меню …

 <Toolbar android:layout_width="match_parent" android:layout_height="52dp" android:id="@+id/toolbar"> </Toolbar> 

Может быть, я здесь что-то пропустил, но до сих пор я не мог отображать действия за пределами меню переполнения с помощью appCompat. Любая помощь по этому поводу будет высоко оценена.

Введите описание изображения здесь

Для тренировки в Action Bar вам нужно использовать атрибуты app:showAsAction а не атрибут android:showAsAction :

Обратите внимание, что вышеприведенный атрибут showAsAction использует собственное пространство имен, определенное в <menu> . Это необходимо при использовании любых атрибутов XML, определенных библиотекой поддержки, поскольку эти атрибуты не существуют в платформе Android на старых устройствах. Поэтому вы должны использовать свое собственное пространство имен в качестве префикса для всех атрибутов, определенных библиотекой поддержки.

Поэтому ваш файл меню должен выглядеть так:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_test" app:showAsAction="always" android:icon="@drawable/ic_launcher" android:title="@string/action_settings"/> <item android:id="@+id/action_settings" android:orderInCategory="100" app:showAsAction="never" android:title="@string/action_settings"/> </menu> 

положил

Xmlns: app = "http://schemas.android.com/apk/res-auto&quot; внутри вашего тега меню

как это

  <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> 

Затем используйте app:showAsAction = "always"

Помните, что использование app:showAsAction во всем элементе меню не android:showAsAction

`

Прежде всего, используйте app:showAsAction вместо android:showAsAction (например, @ianhanniballake) после этого в onCreateActionMode после раздувания вашего меню setShowAsAction в коде, подобном этому

 @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.your_menu_name, menu); menu.findItem(R.id.your_first_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.findItem(R.id.your_second_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; } 

У меня была такая же проблема, поэтому после работы над этим эти строки кода отлично подходят для меня.

Intereting Posts