Leider ist diese erste version von BottomNavigationView kam mit einer Menge von Einschränkungen. Und für jetzt, die Sie nicht entfernen können die Titel nur über das support-design-API. So lösen diese Beschränkung während google nicht umsetzen, die Sie tun können (mit Reflexion):
1. Legen Sie den Titel leer aus bottom_navigation_menu.xml Datei.
2. Erstellen Sie die unten helper Klasse mit der spiegelung
import android.support.design.internal.BottomNavigationMenuView;import android.support.design.widget.BottomNavigationView;import android.support.v7.widget.AppCompatImageView;import android.util.Log;import android.view.Gravity;import android.widget.FrameLayout;import java.lang.reflect.Field;publicclassBottomNavigationViewHelper{publicstaticvoid 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);
item.setPadding(0,15,0,0);//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);}}}
3. In Ihrer Haupttätigkeit, fügen Sie diese Zeilen:
Dies ist eine temporäre Lösung. Nur hinzufügen: app:itemTextColor="@android:color/transparent" machen es wie die hintergrund-Farbe ist, erscheint deaktiviert. Es ist das Symbol Aussehen erhöhten.
Wollte ich entfernen sowohl die shift animation und die Beschriftungen und keine der Lösungen hier, die gut für mich gearbeitet, also hier ist die, die ich gebaut basierend auf alles, was ich hier gelernt:
publicvoid removeLabels(@IdResint... menuItemIds){
getViewTreeObserver().addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener(){@Overridepublicboolean onPreDraw(){
getViewTreeObserver().removeOnPreDrawListener(this);//this only needs to be calculated once for an unchecked item, it'll be the same value for all itemsViewGroup uncheckedItem = findFirstUncheckedItem(menuItemIds);View icon = uncheckedItem.getChildAt(0);int iconTopMargin =((LayoutParams) uncheckedItem.getChildAt(0).getLayoutParams()).topMargin;int desiredTopMargin =(uncheckedItem.getHeight()- uncheckedItem.getChildAt(0).getHeight())/2;int itemTopPadding = desiredTopMargin - iconTopMargin;for(int id : menuItemIds){ViewGroup item = findViewById(id);//remove the label
item.removeViewAt(1);//and then center the icon
item.setPadding(item.getPaddingLeft(), itemTopPadding, item.getPaddingRight(),
item.getPaddingBottom());}returntrue;}});}@SuppressLint("RestrictedApi")privateViewGroup findFirstUncheckedItem(@IdResint... menuItemIds){BottomNavigationItemView item = findViewById(menuItemIds[0]);int i =1;while(item.getItemData().isChecked()){
item = findViewById(menuItemIds[i++]);}return item;}
Fügen Sie einfach diese Methode, um Ihre benutzerdefinierten BottomNavigationView und nennen Sie es vorbei die ids der Menüpunkte.
Ich würde empfehlen, es zu implementieren, indem Sie sich als sanf0rd gab in seiner Antwort. Aber AppCompatImageView ist nicht für mich arbeiten. Ich habe es geändert ImageView. Und geändert getChildAt zu findViewById.
Außerdem Verstecke ich alle labels von nicht markierten Elemente.
Ich hoffe ich bin nicht zu spät zur party hier.
Aber als Unterstützung von Design-Bibliothek 28.0.0-alpha1
Sie können die Eigenschaft
können Sie andere Werte "auto", "beschriftet" und "ausgewählt".
InformationsquelleAutor der Antwort Abdul-Aziz-Niazi
Würden Sie wollen, zu diesem Stil ?
Wenn dem so ist, empfehle ich Ihnen versuchen BottomNavigationViewEx.
InformationsquelleAutor der Antwort ittianyu
Leider ist diese erste version von BottomNavigationView kam mit einer Menge von Einschränkungen. Und für jetzt, die Sie nicht entfernen können die Titel nur über das support-design-API. So lösen diese Beschränkung während google nicht umsetzen, die Sie tun können (mit Reflexion):
1. Legen Sie den Titel leer aus bottom_navigation_menu.xml Datei.
2. Erstreckt sich die BottomNavigationView:
3. Hinzufügen layout.xml diese customView
Weitere details habe ich umgesetzt auf Github
InformationsquelleAutor der Antwort Sanf0rd
1. Set
android:title="";
im menu/abc.xml2. Erstellen Sie die unten helper Klasse mit der spiegelung
3. In Ihrer Haupttätigkeit, fügen Sie diese Zeilen:
InformationsquelleAutor der Antwort
Reflectionless Ansatz:
InformationsquelleAutor der Antwort Nikola Despotoski
Dies ist eine temporäre Lösung. Nur hinzufügen:
app:itemTextColor="@android:color/transparent"
machen es wie die hintergrund-Farbe ist, erscheint deaktiviert. Es ist das Symbol Aussehen erhöhten.InformationsquelleAutor der Antwort liveneato
Wollte ich entfernen sowohl die shift animation und die Beschriftungen und keine der Lösungen hier, die gut für mich gearbeitet, also hier ist die, die ich gebaut basierend auf alles, was ich hier gelernt:
Fügen Sie einfach diese Methode, um Ihre benutzerdefinierten
BottomNavigationView
und nennen Sie es vorbei die ids der Menüpunkte.InformationsquelleAutor der Antwort Thiago Porciúncula
Ich würde empfehlen, es zu implementieren, indem Sie sich als sanf0rd gab in seiner Antwort. Aber
AppCompatImageView
ist nicht für mich arbeiten. Ich habe es geändertImageView
. Und geändertgetChildAt
zufindViewById
.Außerdem Verstecke ich alle labels von nicht markierten Elemente.
InformationsquelleAutor der Antwort Mikolasan