2017-02-15 31 views
7

Jestem nowy na Androida i próbuję utworzyć aplikację z więcej niż 3 elementami na dolnym pasku nawigacyjnym. Mogę je wyświetlać, ale na końcu są zgrupowane, a tylko trzy są prawidłowo widoczne. Tu jest mój kodu:Więcej niż 3 elementy w dolnym pasku nawigacji 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" /> 

Oto obraz widzenia: This is the snapshot

siedzę proszę o pomoc ..

+0

Wybrana pozycja będzie zawsze mają większą ilość miejsca (biorąc pod uwagę, że musi pokazać tytuł). Kiedy wybierzesz inny element, czy go rozszerzysz? – ianhanniballake

Odpowiedz

3

Nie jestem pewien, ale o ile mi wiadomo, nie jest możliwe dołączenie więcej niż 3 elementów za pomocą dolnego paska, bez zniekształcania wyrównania. Co można zrobić tak czy inaczej to zrobić układ liniowy z orientacji poziomej, oraz tym, że zestaw tych ikon jak widoki graficznych, a następnie dokonać ich wagi jako 1.

Oto kod,

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

A potem inne widoki obrazów w ten sposób.

14

Możesz użyć poniższej metody, aby nie uzyskać klastrowanych pozycji menu. Tę metodę należy wywołać w trybie onCreate, przekazując 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

to działa dobrze –

+0

Dzięki. Cieszę się, że pomogłem komuś .. @ 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

doskonały, działa dla mnie, ale muszę umieścić @SuppressLint ("RestrictedApi") tę adnotację w klasie pomocnika. czy to dobra praktyka? – Vrajesh