Я хочу использовать ToolBar
вместо ActionBar
, но не показываю мне меню на панели инструментов !!! я хочу установить меню, такое как кнопки обновления или настройки в ActionBar
.
Код Toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.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:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:navigationContentDescription="@string/abc_action_bar_up_description"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="Main Page"
android:gravity="center"/>
Код MainPage.java:
public class MainPage extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
toolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("Main Page");
}
toolbar.setSubtitle("Test Subtitle");
toolbar.inflateMenu(R.menu.main_manu);
}
}
main_menu.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">
<item
android:id="@+id/menu_main_setting"
android:icon="@drawable/ic_settings"
android:orderInCategory="100"
app:showAsAction="always"
android:actionLayout="@layout/toolbar"
android:title="Setting" />
<item
android:id="@+id/menu_main_setting2"
android:icon="@drawable/ic_settings"
android:orderInCategory="200"
app:showAsAction="always"
android:actionLayout="@layout/toolbar"
android:title="Setting" />
</menu>
Как исправить эту проблему и показать меню в Toolbar
? спасибо всем дорогие <3
Android Studio
и проверьте его. ToolBar не должен быть независимым объектом.Ответы:
просто переопределите onCreateOptionsMenu, как это, в своем MainPage.java
источник
Не используйте setSupportActionBar (панель инструментов)
Не знаю почему, но у меня это работает.
Для пункта меню нажмите, сделайте это
источник
Вот более полный ответ в качестве ссылки для будущих посетителей. Обычно я использую панель поддержки, но в любом случае она работает так же хорошо.
1. Сделать меню xml
Это будет в
res/menu/main_menu
.res
папку правой кнопкой мыши и выберите « Создать»> «Файл ресурсов Android» .main_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"> <item android:id="@+id/action_add" android:icon="@drawable/ic_add" app:showAsAction="ifRoom" android:title="Add"> </item> <item android:id="@+id/action_settings" app:showAsAction="never" android:title="Settings"> </item> </menu>
Вы можете щелкнуть правой кнопкой мыши
res
и выбрать « Новый ресурс изображения», чтобы создатьic_add
значок.2. Раздуть меню
В свою деятельность добавьте следующий метод.
3. Обработка щелчков по меню
Также в своей деятельности добавьте следующий метод:
дальнейшее чтение
источник
Вам нужно переопределить этот код в своей деятельности:
и установите панель инструментов следующим образом:
источник
Также вам нужно это, чтобы реализовать какое-то действие для каждого пункта меню.
источник
Хотя я согласен с этим ответом, поскольку в нем меньше строк кода и он работает:
Как настроить меню на панель инструментов в Android
Я предлагаю всегда запускать любой проект с помощью мастера Android Studio. В этом коде вы найдете несколько стилей: -
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
и использование:
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout>
Из-за того , что
no action bar theme
instyles.xml
применяется кMain Activity
inAndroidManifest.xml
, исключений нет, поэтому вы должны проверить это там.<activity android:name=".MainActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Toolbar
Не является независимым юридическим лицом, это всегда взгляд ребенка вAppBarLayout
том , что снова ребенокCoordinatorLayout
.И ТО И ДРУГОЕ:
Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar);
А ТАКЖЕ:
Как настроить меню на панель инструментов в Android
БУДЕТ РАБОТАТЬ.
Удачного кодирования :-)
источник
В своей деятельности переопределите этот метод.
Это расширит ваше меню ниже:
<?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_main_setting" android:icon="@drawable/ic_settings" android:orderInCategory="100" app:showAsAction="always" android:actionLayout="@layout/toolbar" android:title="Setting" /> <item android:id="@+id/menu_main_setting2" android:icon="@drawable/ic_settings" android:orderInCategory="200" app:showAsAction="always" android:actionLayout="@layout/toolbar" android:title="Setting" /> </menu>
источник
Вы по-прежнему можете использовать ответ, предоставленный с помощью Toolbar.inflateMenu, даже при использовании setSupportActionBar (панель инструментов).
У меня был сценарий, в котором мне пришлось переместить функции настройки панели инструментов в отдельный класс за пределами Activity, который сам по себе не знал о событии onCreateOptionsMenu.
Итак, чтобы реализовать это, все, что мне нужно было сделать, это дождаться отображения панели инструментов перед вызовом inflateMenu, выполнив следующие действия:
Может не считаться очень чистым, но все же выполняет свою работу.
источник
В моем случае я использую AppBarLayout с CollapsingToolbarLayout, и меню всегда прокручивается за пределы экрана, я решил свою проблему, переключив android: actionLayout в XML меню на идентификатор панели инструментов. Надеюсь, это поможет людям в такой же ситуации!
activity_main.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:fab="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activities.MainScreenActivity" android:screenOrientation="portrait"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="300dp" app:elevation="0dp" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsingBar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="exitUntilCollapsed|scroll" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="48dp" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:elevation="0dp" app:popupTheme="@style/AppTheme.PopupOverlay" app:layout_collapseMode="pin"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>
main_menu.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"> <item android:id="@+id/logoutMenu" android:orderInCategory="100" android:title="@string/log_out" app:showAsAction="never" android:actionLayout="@id/toolbar"/> <item android:id="@+id/sortMenu" android:orderInCategory="100" android:title="@string/sort" app:showAsAction="never"/> </menu>
источник
В XML добавьте одну строку внутри
<Toolbar/>
<com.google.android.material.appbar.MaterialToolbar app:menu="@menu/main_menu"/>
В файле java замените это:
с этим:
источник
Простое исправление этого садилось
showAsAction
кalways
вmenu.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"> <item android:id="@+id/add_alarm" android:icon="@drawable/ic_action_name" android:orderInCategory="100" android:title="Add" app:showAsAction="always" android:visible="true"/> </menu>
источник
res / layout / drawer_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"> <item android:id="@+id/action_drawer" android:title="@string/app_name" android:icon="@drawable/ic_menu_black_24dp" app:showAsAction="always"/> </menu>
toolbar.xml
<com.google.android.material.appbar.AppBarLayout 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:theme="@style/AppTheme.AppBarOverlay"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" app:titleTextColor="@android:color/white" app:titleTextAppearance="@style/TextAppearance.Widget.Event.Toolbar.Title"> <TextView android:id="@+id/toolbar_title" android:layout_gravity="center" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/app_name" android:textColor="@android:color/white" style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" /> </androidx.appcompat.widget.Toolbar>
источник
Ну, вам нужно установить панель действий поддержки setSupportActionBar (); и передайте свою переменную, например:
setSupportActionBar(toolbar);
источник