2017-02-15 2 views
7

Ich bin neu bei Android und ich versuche, eine App mit mehr als 3 Elemente in der unteren Navigationsleiste zu machen. Ich kann sie anzeigen, aber sie werden am Ende gruppiert und nur drei sind richtig sichtbar. Hier ist mein Code:Mehr als 3 Elemente in der unteren Navigationsleiste 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" /> 

Hier wird das Bild der Ansicht: This is the snapshot

ich stecken bin bitte helfen ..

+0

Das ausgewählte Element wird immer eine größere Menge an Speicherplatz (da es sich um den Titel zu zeigen hat). Wenn Sie ein anderes Element auswählen, wird es erweitert? – ianhanniballake

Antwort

3

Ich bin nicht sicher, aber meines Wissens ist es nicht möglich, mehr als 3 Elemente mit der unteren Leiste zu begleiten, ohne die Ausrichtung zu verzerren. Was Sie sowieso tun, ist eine lineare Layout mit horizontaler Ausrichtung machen, und dass diese Symbole als Bildansichten gesetzt und dann ihr Gewicht machen als 1.

Hier ist der Code,

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

Und dann andere Bildansichten wie diese.

14

Sie können die folgende Methode verwenden, um keine geclusterten Menüelemente zu erhalten. Sie müssen diese Methode in onCreate-Methode aufrufen, die BottomNavigationView übergibt.

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

es funktioniert gut –

+0

Danke. Ich bin froh, dass ich jemandem geholfen habe .. @ 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

perfekt, es funktioniert für mich, aber ich muss @SuppressLint ("RestrictedApi") diese Anmerkung in einer Hilfsklasse setzen. ist es eine gute Praxis? – Vrajesh

Verwandte Themen