Google wydała nowe wsparcie V25 biblioteka z BottomNavigationViewUsuń BottomNavigationView etykiet
jest jakiś sposób, aby usunąć elementy etykiety?
Google wydała nowe wsparcie V25 biblioteka z BottomNavigationViewUsuń BottomNavigationView etykiet
jest jakiś sposób, aby usunąć elementy etykiety?
Niestety ta pierwsza wersja BottomNavigationView pojawiła się z wieloma ograniczeniami. Na razie nie można usunąć tytułów za pomocą interfejsu API projektowania wsparcia. Aby rozwiązać to ograniczenie, gdy google go nie implementuje, możesz wykonać (używając refleksji):
1. Ustaw tytuły puste z pliku bottom_navigation_menu.xml.
2. Rozszerza BottomNavigationView:
public class MyBottomNavigationView extends BottomNavigationView {
public MyBottomNavigationView(Context context, AttributeSet attrs) {
super(context, attrs);
centerMenuIcon();
}
private void centerMenuIcon() {
BottomNavigationMenuView menuView = getBottomMenuView();
if (menuView != null) {
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);
AppCompatImageView icon = (AppCompatImageView) menuItemView.getChildAt(0);
FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
params.gravity = Gravity.CENTER;
menuItemView.setShiftingMode(true);
}
}
}
private BottomNavigationMenuView getBottomMenuView() {
Object menuView = null;
try {
Field field = BottomNavigationView.class.getDeclaredField("mMenuView");
field.setAccessible(true);
menuView = field.get(this);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return (BottomNavigationMenuView) menuView;
}
}
3. Dodać do layout.xml ten CustomView
Więcej szczegółów I wprowadziły to na Github
Czy będzie działać na apis poniżej 21? –
Reflectionless podejście:
private void removeTextLabel(@NonNull BottomNavigationView bottomNavigationView, @IdRes int menuItemId) {
View view = bottomNavigationView.findViewById(menuItemId);
if (view == null) return;
if (view instanceof MenuView.ItemView) {
ViewGroup viewGroup = (ViewGroup) view;
int padding = 0;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View v = viewGroup.getChildAt(i);
if (v instanceof ViewGroup) {
padding = v.getHeight();
viewGroup.removeViewAt(i);
}
}
viewGroup.setPadding(view.getPaddingLeft(), (viewGroup.getPaddingTop() + padding)/2, view.getPaddingRight(), view.getPaddingBottom());
}
}
Co jeśli chcę usunąć ikonę zamiast tekstu –
Jak korzystać z tego kodu? –
Jak mogę wywołać tę funkcję w głównej czynności, w której domyślny kod BottomNavigation już istnieje? @NikolaDespotoski – TiagoIB
To jest tymczasowa poprawka. Wystarczy dodać: app:itemTextColor="@android:color/transparent"
To sprawi, że niezależnie od koloru tła, będzie wyłączone. Sprawia, że ikona wygląda na wyższą.
Chcesz tego stylu?
Jeśli tak, to polecam spróbować BottomNavigationViewEx.
najlepsza biblioteka dla dolnego menu. dzięki ... działa dobrze. –
Polecam do wdrożenia go przez siebie, jak sanf0rd gave in his answer. Ale AppCompatImageView
nie działa dla mnie. Zmieniłem go na ImageView
. I zmieniono getChildAt
na findViewById
.
Ukrywam też wszystkie etykiety niewybranych pozycji.
private void centerMenuIcon() {
BottomNavigationMenuView menuView = getBottomMenuView();
if (menuView != null) {
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);
TextView smallText = (TextView) menuItemView.findViewById(R.id.smallLabel);
smallText.setVisibility(View.INVISIBLE);
//TextView largeText = (TextView) menuItemView.findViewById(R.id.largeLabel);
ImageView icon = (ImageView) menuItemView.findViewById(R.id.icon);
FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
params.gravity = Gravity.CENTER;
menuItemView.setShiftingMode(true);
}
}
}
Zestaw ANDROID tytułowy = ""; w menu/abc.xml
Utwórz poniżej klasy pomocnika, który jest przy użyciu odbicia
`
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;
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);
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);
}
}
}
`
Czy próbowałeś usunąć 'title's z menu'- 's? –
Po usunięciu tytułów pojawia się dodatkowe wypełnienie pod ikonami. Dodanie 'layout_marginBottom =" - 16dp "' spowoduje usunięcie tego dopełnienia, ale zmniejszy cały widok. – dzikovskyy
Możesz zamiast ustawiać margines, ustaw niestandardową wysokość i dodaj dodatkowe dopełnienie do góry. W ten sposób możesz wyśrodkować ikony. – Bolling