Как убрать всю анимацию BottomNavigationView без помощника? - PullRequest
0 голосов
/ 30 января 2019

Как удалить всю анимацию BottomNavigationView без всякого помощника или proGuard и легко с зависимостью от материала Google com.google.android.material:material:1.0.0?

1 Ответ

0 голосов
/ 30 января 2019
  1. Мы все знаем, что по умолчанию BottomNavigationView имеет несколько эффектов, таких как горизонтальный перевод и увеличенный текст, если выбран пункт меню.

default

Мы можем удалить перевод добавив
<com.google.android.material.bottomnavigation.BottomNavigationView
    ...
    app:itemHorizontalTranslationEnabled="false"/>

Translation Removed

Мы можем показать метку и удалить перевод вместе без app:itemHorizontalTranslationEnabled="false" таким образом
<com.google.android.material.bottomnavigation.BottomNavigationView
    ...
    app:labelVisibilityMode="labeled"/>

Labeled

Если номер 3 нас не устраивает, мы все равно можем использовать тот же размер текста, что и неактивное меню, добавив dimens в dimens.xml.Делая это, мы получаем почти без анимации BottomNavigationView
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
    <dimen name="design_bottom_navigation_active_text_size"
        tools:override="true">12sp</dimen>
</resources>

enter image description here

БОНУСНАЯ ПРОБЛЕМА

Но есть еще одна проблема.Что если текст меню длинный текст?Что, если он состоит из 2 слов?

Если это ваш вопрос, вы увидите длинный текст, обрезанный при выборе меню.(Пожалуйста, посмотрите на третье меню)

Long Text Problem

И это решение, которое я получил после экспериментов с BottomNavigationView

void selectFragment(MenuItem item) {
    item.setChecked(true);

    int itemID = item.getItemId();
    if (itemID == R.id.menu_a) {
        pushFragment(MenuAFragment.newInstance("MENU A"));
    }
    else if (itemID == R.id.menu_b) {
        pushFragment(MenuAFragment.newInstance("MENU B"));
    }
    else if (itemID == R.id.menu_c) {
        pushFragment(MenuAFragment.newInstance("MENU C"));
    }
    else if (itemID == R.id.menu_d) {
        pushFragment(MenuAFragment.newInstance("MENU D"));
    }
    else {
        pushFragment(MenuAFragment.newInstance("MENU E"));
    }

    /**** START FROM HERE ****/

    TextView largeTextView = bottomNavigationView.findViewById(itemID)
            .findViewById(com.google.android.material.R.id.largeLabel);
    TextView smallTextView = bottomNavigationView.findViewById(itemID)
            .findViewById(com.google.android.material.R.id.smallLabel);

    smallTextView.setVisibility(View.VISIBLE);
    largeTextView.setVisibility(View.GONE);
}

В основном нам нужно только скрыть largeTextView и показать smallTextView Long Text Problem Solved

Хотите узнать больше?Просто посмотрите на этот репо DisableShiftMode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...