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

amo*_*the 10 android android-support-library androiddesignsupport bottomnavigationview

在此输入图像描述

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

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

所有准备好看到这个解决方案不想使用它

Div*_*_08 0

你好,我遇到了同样的问题,我知道在 xamarin android 中加载反射 java 库是一项繁琐的任务。

但感谢“ James Montemagno ”提供了解决方案。您可以点击以下链接并获得您想要的结果!

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

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

Git 帖子: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}");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

比使用它:

var BottomNavigationView = FindViewById(Resource.Id.bottomNavigationBar); BottomNavigationView.SetShiftMode(假,假);

  • 这使用了反射。 (4认同)