如何在没有助手的情况下删除BottomNavigationView的所有动画?

j.e*_*mer 0 android bottomnavigationview

如何在没有任何Helper或proGuard的情况下以Google材质依赖的简单方式删除BottomNavigationView的所有动画com.google.android.material:material:1.0.0

j.e*_*mer 7

  1. 众所周知,默认情况下BottomNavigationView,如果选择了菜单项,则具有多种效果,例如水平翻译和较大的文本。

默认

  1. 我们可以删除添加的翻译
<com.google.android.material.bottomnavigation.BottomNavigationView
    ...
    app:itemHorizontalTranslationEnabled="false"/>
Run Code Online (Sandbox Code Playgroud)

翻译已删除

  1. 我们可以证明标签和一起卸下转换,而无需app:itemHorizontalTranslationEnabled="false"这样
<com.google.android.material.bottomnavigation.BottomNavigationView
    ...
    app:labelVisibilityMode="labeled"/>
Run Code Online (Sandbox Code Playgroud)

贴有标签

  1. 如果我们对数字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>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

奖金问题

但是,还有另一个问题。如果菜单文本为长文本怎么办?如果它由2个字组成怎么办?

如果这是您的问题,则在选择菜单后,您会看到修剪的长文本。(请看第三个菜单)

长文本问题

这是我尝试过后得到的解决方案 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);
}
Run Code Online (Sandbox Code Playgroud)

基本上,我们只需要隐藏largeTextView和显示smallTextView 解决长文本问题

想知道更多?只要看看这个仓库DisableShiftMode