简体   繁体   中英

Android: Issue in switching between menus of Bottom Navigation View

I'm using Bottom Navigation View for my application. Here I have added 3 items in menu and have customized the app:itemTextAppearanceActive & app:itemTextAppearanceInactive attribute of Bottom Navigation View as follows:

    <android.support.constraint.ConstraintLayout
        android:layout_below="@+id/tb_home"
        android:id="@+id/cl_home_stats"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">
        <android.support.design.widget.BottomNavigationView
            android:id="@+id/bnv_home_stats"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="?android:attr/windowBackground"
            android:soundEffectsEnabled="true"
            app:labelVisibilityMode="labeled"
            app:itemTextAppearanceActive="@style/navTextActive"
            app:itemTextAppearanceInactive="@style/navTextInactive"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:menu="@menu/navigation"/>
    </android.support.constraint.ConstraintLayout>

in style xml file:

<style name="navTextInactive">
    <item name="android:textSize">20dp</item>
    <item name="android:textColor">@color/colorInActive</item>
</style>

<style name="navTextActive">
    <item name="android:textSize">20dp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@color/colorActive</item>
</style>

When a click is made on navigation menu, there is no change in Active and Inactive status of other menus. Active selection remains of first menu even if you select other menu.

Complete xml file for activity view:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".HomeActivity"
    tools:showIn="@layout/app_bar_home">

    <RelativeLayout
        android:id="@+id/rl_home"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible">
        <android.support.design.widget.TabLayout
            android:id="@+id/tb_home"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabTextAppearance="@style/MyCustomTabText"
            android:visibility="gone">

            <android.support.design.widget.TabItem
                android:id="@+id/tb_home_billing"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/title_billing"/>

            <android.support.design.widget.TabItem
                android:id="@+id/tb_home_stats"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/title_stats" />
        </android.support.design.widget.TabLayout>

        <RelativeLayout
            android:layout_below="@+id/tb_home"
            android:id="@+id/rl_home_billing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone">
            <Button
                android:id="@+id/bt_home_billing_order"
                android:layout_alignParentStart="true"
                android:layout_width="160dp"
                android:layout_height="80dp"
                android:layout_marginStart="10dp"
                android:layout_marginTop="10dp"
                android:text="@string/title_order"
                android:textSize="20sp"
                android:textStyle="bold"/>
            <Button
                android:id="@+id/bt_home_billing_parcel"
                android:layout_alignParentEnd="true"
                android:layout_width="160dp"
                android:layout_height="80dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="10dp"
                android:text="@string/title_parcel"
                android:textSize="20sp"
                android:textStyle="bold"/>

            <ExpandableListView
                android:id="@+id/elv_home_billing_unsettled"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/bt_home_billing_order"
                android:layout_marginTop="30dp"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft"
                android:divider="@android:color/darker_gray"
                android:dividerHeight="0.5dp">
            </ExpandableListView>
        </RelativeLayout>

        <android.support.constraint.ConstraintLayout
            android:layout_below="@+id/tb_home"
            android:id="@+id/cl_home_stats"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone">
            <android.support.design.widget.BottomNavigationView
                android:id="@+id/bnv_home_stats"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:background="?android:attr/windowBackground"
                android:soundEffectsEnabled="true"
                app:labelVisibilityMode="labeled"
                app:itemTextAppearanceActive="@style/navTextActive"
                app:itemTextAppearanceInactive="@style/navTextInactive"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:menu="@menu/navigation"/>
        </android.support.constraint.ConstraintLayout>

    </RelativeLayout>

</android.support.constraint.ConstraintLayout>

You first add in main layout this code:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">
    <com.google.android.material.tabs.TabLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        tools:ignore="MissingConstraints" >

    </com.google.android.material.tabs.TabLayout>

    <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"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        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>

And in menu named bottom_nav_menu.xml :

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

<item
    android:id="@+id/navigation_dashboard"
    android:icon="@drawable/ic_dashboard_black_24dp"
    android:title="@string/title_dashboard" />

<item
    android:id="@+id/navigation_notifications"
    android:icon="@drawable/ic_notifications_black_24dp"
    android:title="@string/title_notifications" />

And which fragment you want to switch, you should add those fragment .

And for activity code is :

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView 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_dashboard, R.id.navigation_notifications)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        NavigationUI.setupWithNavController(navView, navController);
    }

And from Android-Studio you can start this automatically:

New Project> Phone and Tablet > Navigation Drawer Activity> Done

Or For new activity :

New > Activity > Bottom Navigation Activity> Done.

Hope it will help you otherwise you can ask me in comment. Thanks.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM