How can i dynamically change bottom navigation items text?

7.7k Views Asked by At

enter image description here

Im trying to achieve the above design. I'm able to change the icons, but cannot change the bottom text. Im using material bottom navigation bar

I achieved the icon change by implementing separate selector drawables for each icon. Is there any way that i can do the same with the nav titles?

MainActivity.class

public class MainActivity extends AppCompatActivity {
BottomNavigationView navView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    navView = findViewById(R.id.nav_view);

    // 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_home, R.id.navigation_saved, R.id.navigation_applied, R.id.navigation_profile, R.id.navigation_more)
            .build();

    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
    NavigationUI.setupWithNavController(navView, navController);



}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        app:itemIconTint="@null"
        app:itemHorizontalTranslationEnabled="false"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:labelVisibilityMode="labeled"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

</androidx.constraintlayout.widget.ConstraintLayout>

bottom_nav_menu.xml

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/home_selector"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_saved"
        android:icon="@drawable/saved_jobs_selector"
        android:title="@string/title_saved" />

    <item
        android:id="@+id/navigation_applied"
        android:icon="@drawable/applied_jobs_selector"
        android:title="@string/title_applied" />

    <item
        android:id="@+id/navigation_profile"
        android:icon="@drawable/profile_selector"
        android:title="@string/title_profile" />


    <item
        android:id="@+id/navigation_more"
        android:icon="@drawable/more_selector"
        android:title="@string/title_More" />

</menu>
5

There are 5 best solutions below

1
niceumang On

Check below the line of code and add this when you select your item of BottomNavigation in Kotlin (convert java to kotlin).

navView.getCheckedItem().setTitle(".");
0
Revenec On

Hi I could change the title in the navigation bar by implementing:

private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item)
    {
        switch (item.getItemId())
        {
            
        }
    }
};

After it in the switch you add the string based on the item id

0
murgupluoglu On

You can change like this:

for(i in 0 until bottomNavigation.maxItemCount){
   bottomNavigation.menu[i].title = "My Custom Title"
}
0
Javier Diaz On

I change the title and Icon programmatically like that:

fun changeMenuItemTextAndIcon(){
    val item: MenuItem = bottom_navigation.menu.findItem(R.id.action_scan)
    item.title = getString(R.string.label_scan_item)
    item.icon = ContextCompat.getDrawable(activity, R.drawable.ic_barcode)
}
0
kiumars gilanizadeh On

Simple way to do this.

BottomNavigationView navigationView = findViewById(R.id.bottomnavigationbar);

by below code you can change item text

navigationView.getMenu().getItem(2).setTitle(getResources().getString(R.string.news));

write index of your menu item in getItem(index here) index of menu start from zero