android.support.design.widget.BottomNavigationView ist eine der offiziellen Bibliotheken.
Bottom navigation
1. Erstellen Sie ein Farbverzeichnis in res p>
2. Erstellen Sie buttom_navigation.xml im Farbverzeichnis und schreiben Sie den folgenden Inhalt p>
res/color/buttom_navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="#FFF" />
<item android:state_pressed="true" android:color="#FFF" />
<item android:color="#969696" />
</selector>
3. Geben Sie für die Buttom-Navigationsansicht p> an
res/layout/main.xml
...
<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:itemBackground="@color/themecolor"
app:itemIconTint="@color/buttom_navigation"
app:itemTextColor="@color/buttom_navigation"
app:menu="@menu/navigation" />
...
Referenz: Anpassung von BottomNavigationView
main.java
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
// no-hide menu-text
BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigation.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i);
itemView.setShiftingMode(false);
itemView.setChecked(false); //Wird aufgerufen, um den Status der Ansicht wiederzugeben
}
}
Wenn im Standardzustand vier Registerkarten (Elemente) vorhanden sind, wird die Breite der ausgewählten Registerkarte erheblich erweitert und die anderen werden verkleinert. Ich möchte alle vier Breiten reparieren.
BottomNavigationViewHelper.java
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);
}
}
}
main.java
...
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
BottomNavigationViewHelper.disableShiftMode(navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
...