How to disable BottomNavigationView shift mode?

后端 未结 21 2344
Happy的楠姐
Happy的楠姐 2020-11-22 15:55

BottomNavigationView doesn\'t show menu\'s title that are inactive.

How to show titles of all menu elements in bottomNavigationBar? The problem is that in my case s

21条回答
  •  星月不相逢
    2020-11-22 16:46

    I use Android Studio 4.0.1 to develop it. The following is my result...

    About BottomNavigationViewHelper.java My code is work here

    import com.google.android.material.bottomnavigation.BottomNavigationItemView;
    import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
    import com.google.android.material.bottomnavigation.BottomNavigationView;
    import com.google.android.material.bottomnavigation.LabelVisibilityMode;
    import android.annotation.SuppressLint;
    import android.util.Log;
    import java.lang.reflect.Field;
    public class BottomNavigationViewHelper {
        @SuppressLint("RestrictedApi")
        public static void disableShiftMode(BottomNavigationView view) {
            view.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
            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.setShifting(false);
                    item.setLabelVisibilityMode( LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
                    // 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);
            }
        }
    }
    

    Then we can start to use BottomNavigationViewHelper class And this is my code for MainActivity.java.

    BottomNavigationView navView = findViewById(R.id.nav_view); BottomNavigationViewHelper.disableShiftMode(navView);

    import android.os.Bundle;
    import com.google.android.material.bottomnavigation.BottomNavigationView;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.navigation.NavController;
    import androidx.navigation.Navigation;
    import androidx.navigation.ui.AppBarConfiguration;
    import androidx.navigation.ui.NavigationUI;
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            BottomNavigationView navView = findViewById(R.id.nav_view);
            BottomNavigationViewHelper.disableShiftMode(navView);
            // Passing each menu ID as a set of Ids because each
            // menu should be considered as top level destinations.
            AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                    R.id.navigation_settings,
                    R.id.navigation_connection,
                    R.id.navigation_status,
                    R.id.navigation_report,
                    R.id.navigation_profile
            ).build();
    
            NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
            NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
            NavigationUI.setupWithNavController(navView, navController);
            getSupportActionBar().hide();
        }
    }
    

提交回复
热议问题