Как добавить собственное меню в нижнюю панель приложений?

Я использую новую панель приложения Material Bottom в android. Я успешно реализовал это, но не знаю, как добавлять в панель собственные пункты меню. Каждый раз, когда я добавляю пункты меню, они отображаются как 3 точки, даже если я предоставляю опцию android: showAsAction = "always".

Мне нужны определенные значки, как на скриншоте ниже. Но вместо этого я получаю такой результат. Как добавить собственное меню в нижнюю панель приложений?

Вот код макета.

<com.google.android.material.bottomappbar.BottomAppBar
    android:id = "@+id/bottom_app_bar"
    style = "@style/Widget.MaterialComponents.BottomAppBar"
    android:layout_width = "match_parent"
    android:layout_height = "50dp"
    android:layout_gravity = "bottom"
    app:backgroundTint = "@color/colorPrimaryDark"
    app:fabCradleMargin = "5dp"
    app:fabAlignmentMode = "center"/>

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id = "@+id/fab"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    app:layout_anchor = "@id/bottom_app_bar" />

А вот и Java-код.

BottomAppBar bottomAppBar = (BottomAppBar) findViewById(R.id.bottom_app_bar);
setSupportActionBar(bottomAppBar);

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.navigation, menu);
    return true;
}

Код меню.

<item
    android:id = "@+id/navigation_explore"
    android:icon = "@drawable/explore"
    android:title = "Explore"
    android:showAsAction = "always"/>

<item
    android:id = "@+id/navigation_profile"
    android:icon = "@drawable/profile"
    android:title = "Profile"
    android:showAsAction = "always"/>
8
0
7 943
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Для этого вы можете использовать всплывающее меню. Поместите изображение меню и, щелкнув изображение, откройте всплывающее меню Android, оно похоже на меню.

  PopupMenu popup = new PopupMenu(MainActivity.this, button);  
            //Inflating the Popup using xml file  
            popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());  

            //registering popup with OnMenuItemClickListener  
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {  
                public boolean onMenuItemClick(MenuItem item) {  
                    Toast.makeText(MainActivity.this,"You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();  
                    return true;  
                }  
            });  

            popup.show();

Вы можете перейти по ссылке ниже: https://www.javatpoint.com/android-popup-menu-example

Попробуйте установить fabCradleDiameter на 0 дБ в BottomAppBar, например: app:fabCradleDiameter = "0dp"

использовать android:showAsAction = "ifRoom"

Я заставил его работать с новой панелью приложения Material Bottom, чтобы отображать значки.

https://developer.android.com/guide/topics/resources/menu-resource

Ответ принят как подходящий

После стольких исследований я наконец нашел решение проблемы. Просто изменив пространство имен showAsAction с android на app, чтобы все заработало.

<item
    android:id = "@+id/navigation_explore"
    android:icon = "@drawable/ic_search"
    android:title = "Explore"
    app:showAsAction = "always" />

Другие вопросы по теме