Более 3 пунктов в нижней панели навигации android

Я новичок в Android и пытаюсь создать приложение с более чем 3 элементами в нижней панели навигации. Я могу отобразить их, но в конце они сгруппированы, и только три из них видны должным образом. Вот мой код:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottomNavigation"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:elevation="15dp"
    android:layout_gravity="bottom"
    android:layout_alignParentBottom="true"
    app:menu="@menu/bottom_nav_items" />

Вот изображение вида: Это снимок

Я застрял, пожалуйста, помогите ..


person DonJon    schedule 15.02.2017    source источник
comment
Выбранный элемент всегда будет иметь больше места (при условии, что он должен отображать заголовок). Когда вы выбираете другой элемент, он расширяется?   -  person ianhanniballake    schedule 15.02.2017


Ответы (3)


Я не уверен, но, насколько мне известно, невозможно сопровождать более 3 предметов, используя нижнюю панель, без искажения выравнивания. В любом случае вы можете сделать линейный макет с горизонтальной ориентацией, и при этом установить эти значки как представления изображений, а затем сделать их вес равным 1.

Вот код,

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:layout_alignParentBottom="true"
    android:background="#fff">

        <ImageView
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="(YOUR IMAGE SOURCE)"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:layout_weight="1"/>

А затем другие подобные изображения.

person Prateek Paliwal    schedule 04.03.2017

Вы можете использовать метод ниже, чтобы не получать сгруппированные пункты меню. Вы должны вызвать этот метод в методе onCreate, передав BottomNavigationView.

// Method for disabling ShiftMode of BottomNavigationView
private void disableShiftMode(BottomNavigationView view) {
    BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
    try {
        Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
        shiftingMode.setAccessible(true);
        shiftingMode.setBoolean(menuView, false);
        shiftingMode.setAccessible(false);
        for (int i = 0; i < menuView.getChildCount(); i++) {
            BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
            item.setShiftingMode(false);
            // set once again checked value, so view will be updated
            item.setChecked(item.getItemData().isChecked());
        }
    } catch (NoSuchFieldException e) {
        Log.e("BNVHelper", "Unable to get shift mode field", e);
    } catch (IllegalAccessException e) {
        Log.e("BNVHelper", "Unable to change value of shift mode", e);
    }
}
person Maulik Dodia    schedule 25.05.2017
comment
Спасибо. Я рад, что помог кому-то .. @ a.g.thamays - person Maulik Dodia; 06.06.2017

person    schedule
comment
отлично, у меня это работает, но я должен поместить эту аннотацию @SuppressLint (RestrictedApi) во вспомогательный класс. это хорошая практика? - person Vrajesh; 28.02.2018