Удалить название BottomNavigationView [дубликат]

Im, используя этот код / ​​формулу. хорошо работает для моих потребностей, только я хотел бы знать, как я могу улучшить формулу клетки, поэтому я могу использовать 3+ таблицы в качестве ссылки. в настоящее время im просто вставляет кучу операторов iferror в iferror

=IFERROR(INDEX(Table1, ROW([@Date])-ROW(Table3[#Headers]),COLUMN(A:A)),IFERROR( INDEX(Table2, ROW([@Date])-ROW(Table3[#Headers])-ROWS(Table1),COLUMN(A:A)), IFERROR(INDEX(Table4, ROW([@Date])-ROW(Table3[#Headers])-ROWS(Table2)-ROWS(Table1),COLUMN(A:A)),INDEX(Table5, ROW([@Date])-ROW(Table3[#Headers])-ROWS(Table2)-ROWS(Table1)-ROWS(Table4),COLUMN(A:A)))))

Im также использует

31
задан Sanf0rd 22 October 2016 в 10:09
поделиться

7 ответов

Надеюсь, я не опоздал на вечеринку здесь.

Но с Android Support Library 28.0.0-alpha1 вы можете использовать свойство

app:labelVisibilityMode="unlabeled"

вы можете использовать другие значения «авто», «помечены» и «выбраны».

2
ответ дан Abdul-Aziz-Niazi 17 August 2018 в 23:29
поделиться

Я бы рекомендовал реализовать его самостоятельно, поскольку sanf0rd дал в своем ответе . Но AppCompatImageView не работает для меня. Я изменил его на ImageView. И изменил getChildAt на findViewById.

Также я скрываю все метки невыбранных элементов.

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);
        }
    }
}
0
ответ дан Community 17 August 2018 в 23:29
поделиться
[Д0] 1. Установите android:title=""; в меню / abc.xml

2. Создайте ниже вспомогательный класс, который использует отражение

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);
        }
    }
} 

3. В своей основной деятельности добавьте следующие строки:

mBottomNav = (BottomNavigationView) findViewById(R.id.navigation);
BottomNavigationViewHelper.disableShiftMode(mBottomNav);
10
ответ дан Michal 17 August 2018 в 23:29
поделиться
  • 1
    лучшая библиотека для нижнего меню. спасибо .. его работа хорошая. – Sagar Chavada 8 March 2017 в 10:24

Это временное исправление. Просто добавьте: app:itemTextColor="@android:color/transparent" Это сделает его тем, что цвет фона, и он отключен. Это делает значок более привлекательным.

7
ответ дан Nikola Despotoski 17 August 2018 в 23:29
поделиться
  • 1
    Как, если я хочу удалить значок вместо текста? – Merhawi Fissehaye 31 March 2017 в 07:30
  • 2
    Как я могу использовать этот код? – Maravilho Singa 27 May 2017 в 02:39
  • 3
    Как я могу назвать это в основном действии, где по умолчанию используется код BottomNavigation? @NikolaDespotoski – TiagoIB 22 November 2017 в 19:30
  • 4
    @TiagoIB просто делает метод статическим и переносит его в какой-то другой класс. Или держите его закрытым и вызывайте его с указанными аргументами. – Nikola Despotoski 22 November 2017 в 20:46
  • 5
    Извините, но как я могу вставить его в свой код? prntscr.com/he03j7 @NikolaDespotoski – TiagoIB 23 November 2017 в 00:10

К сожалению, эта первая версия BottomNavigationView имеет множество ограничений. И пока вы не можете удалить заголовки, используя API-интерфейс поддержки. Поэтому, чтобы решить это ограничение, пока Google не реализует его, вы можете сделать (используя отражение):

1. Задайте заголовки пустыми из файла bottom_navigation_menu.xml.

2. Расширяет представление 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. Добавьте к layout.xml этот customView

Для получения дополнительной информации я реализовал это на Github

16
ответ дан Sanf0rd 17 August 2018 в 23:29
поделиться
  • 1
    Это будет работать на apis ниже 21? – sj_8 7 December 2017 в 06:40
  • 2
    Нет необходимости использовать отражение, вы можете получить каждый BottomNavigationItemView, вызвав findViewById() с помощью элементов меню ids (как @NikolaDespotoski делает в свой ответ ). – Thiago Porciúncula 21 June 2018 в 14:30

Я хотел удалить и анимацию shift , и метки, и ни одно из решений здесь не сработало для меня, поэтому вот тот, который я построил на основе всего, что я узнал здесь:

public void removeLabels(@IdRes int... menuItemIds) {
    getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override public boolean onPreDraw() {
            getViewTreeObserver().removeOnPreDrawListener(this);

            // this only needs to be calculated once for an unchecked item, it'll be the same value for all items
            ViewGroup 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());
            }

            return true;
        }
    });
}

@SuppressLint("RestrictedApi")
private ViewGroup findFirstUncheckedItem(@IdRes int... menuItemIds) {
    BottomNavigationItemView item = findViewById(menuItemIds[0]);
    int i = 1;
    while (item.getItemData().isChecked()) {
        item = findViewById(menuItemIds[i++]);
    }
    return item;
}

Просто добавьте этот метод в свой пользовательский BottomNavigationView и вызовите его, передавая идентификаторы пунктов меню.

1
ответ дан Thiago Porciúncula 17 August 2018 в 23:29
поделиться
8
ответ дан Nikola Despotoski 29 October 2018 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: