2017-02-15 6 views
7

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

<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" /> 

Вот образ зрения: This is the snapshot

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

+0

Выбранный элемент всегда будет иметь больший объем пространства (при условии, что он должен показать название). Когда вы выбираете другой элемент, он расширяется? – ianhanniballake

ответ

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"/> 

А потом другие виды изображений, подобные этому.

14

Вы можете использовать метод ниже для того, чтобы не получать кластерные пункты меню. Вы должны вызвать этот метод в методе 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); 
    } 
} 
+0

работает нормально –

+0

Спасибо. Я рад, что помог кому-то .. @ a.g.thamays –

1
 <android.support.design.widget.BottomNavigationView 
      android:id="@+id/navigation" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:background="?android:attr/windowBackground" 
      app:menu="@menu/navigation" /> 


navigation.xml(inside 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/navigation_home" 
     android:icon="@drawable/ic_home_black_24dp" 
     android:title="@string/title_home" 
     app:showAsAction="always|withText" 
     android:enabled="true"/> 

    inside oncreate method 
    BottomNavigationView navigation = (BottomNavigationView)findViewById(R.id.navigation); 
     BottomNavigationViewHelper.disableShiftMode(navigation);//Dont forgot this line 




    public class BottomNavigationViewHelper { 
     public static 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); 
        //noinspection RestrictedApi 
        item.setShiftingMode(false); 
        // set once again checked value, so view will be updated 
        //noinspection RestrictedApi 
        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); 
      } 
     } 
    } 
+0

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