BottomNavigationView禁用移位模式而不使用反射

时间:2017-01-13 06:11:32

标签: android android-support-library androiddesignsupport bottomnavigationview

enter image description here

BottomNavigationView不允许禁用转换模式在新版支持库中修复此问题?

还有一些解决方案使用反射机制我不认为正确的方法是解决这个主要问题。

All ready seen this solution don't want to use this

4 个答案:

答案 0 :(得分:1)

如果可能,请更新至android sdk-28,然后在您的xml中添加app:labelVisibilityMode="labeled"

答案 1 :(得分:0)

您好我遇到了同样的问题,我知道加载的繁琐任务反映了xamarin android中的java库。

但感谢" James Montemagno "提出解决方案。这是您可以关注的链接,并获得您想要的结果!

它对我有用,希望它也适合你。快乐的编码! :)

链接: https://montemagno.com/remove-shifting-bottomnavigationview-android/

Git Post: https://github.com/jamesmontemagno/Xamarin-Templates/blob/master/Xamarin.Android-Templates/Projects/BottomTabsApp/BlankAppCompat/BottomNavigationViewUtils.cs

公共静态类BottomNavigationViewUtils     {

    /// <summary>
    /// Enable or disable shift mode on bottom navigation view
    /// </summary>

    public static void SetShiftMode(this BottomNavigationView bottomNavigationView, bool enableShiftMode, bool enableItemShiftMode)
    {
        try
        {
            var menuView = bottomNavigationView.GetChildAt(0) as BottomNavigationMenuView;
            if (menuView == null)
            {
                System.Diagnostics.Debug.WriteLine("Unable to find BottomNavigationMenuView");
                return;
            }


            var shiftMode = menuView.Class.GetDeclaredField("mShiftingMode");

            shiftMode.Accessible = true;
            shiftMode.SetBoolean(menuView, enableShiftMode);
            shiftMode.Accessible = false;
            shiftMode.Dispose();


            for (int i = 0; i < menuView.ChildCount; i++)
            {
                var item = menuView.GetChildAt(i) as BottomNavigationItemView;
                if (item == null)
                    continue;

                item.SetShiftingMode(enableItemShiftMode);
                item.SetChecked(item.ItemData.IsChecked);

            }

            menuView.UpdateMenuView();
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine($"Unable to set shift mode: {ex}");
        }
    }
}

比使用它:

var bottomNavigationView = FindViewById(Resource.Id.bottomNavigationBar);  bottomNavigationView.SetShiftMode(FALSE,FALSE);

答案 2 :(得分:0)

您只需要更新到28.0.0支持库! 他们已经提供了 setLabelVisibilityMode()方法来禁用移位

navButton.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);

有关更多信息,请查看https://developer.android.com/reference/com/google/android/material/bottomnavigation/LabelVisibilityMode.html#LABEL_VISIBILITY_SELECTED

答案 3 :(得分:0)

只需将此添加到您的调子中即可。对我有用!

<dimen name="design_bottom_navigation_active_text_size">12sp</dimen>