Navigation

2021-09-02  本文已影响0人  闫鹏飞写字的地方

效果


底部导航.gif

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_nav"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        app:defaultNavHost="true"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_nav"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        android:elevation="5dp"
        app:itemBackground="?android:attr/windowBackground"
        app:itemIconTint="@color/select_bottom_nav_color"
        app:itemTextColor="@color/select_bottom_nav_color"
        app:labelVisibilityMode="labeled"
        app:menu="@menu/bottom_nav_menu"/>

</LinearLayout>

HomeFragment/FaqFragment/UserFragment


import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

class HomeFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false)
    }

}

MainActivity


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.NavGraph
import androidx.navigation.NavGraphNavigator
import androidx.navigation.NavigatorProvider
import androidx.navigation.fragment.NavHostFragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.wy.base.FixFragmentNavigator
import com.wy.home.FaqFragment
import com.wy.home.HomeFragment
import com.wy.navigation.NavigationFragment
import com.wy.user.UserFragment

class MainActivity : AppCompatActivity() {

    private var navController:NavController? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var navHostFragment: NavHostFragment = supportFragmentManager.findFragmentById(R.id.fragment_nav) as NavHostFragment
        navController = navHostFragment.navController
        //创建自定义的Fragment导航器
        val fragmentNavigator = FixFragmentNavigator(this, navHostFragment.childFragmentManager, navHostFragment.id)
        //获取导航器提供者
        val provider = navController!!.navigatorProvider
        //把自定义的Fragment导航器添加进去
        provider.addNavigator(fragmentNavigator)
        //手动创建导航图
        val navGraph = initNavGraph(provider, fragmentNavigator)
        //设置导航图
        navController!!.setGraph(navGraph)

        //        NavigationUI.setupWithNavController(mBinding.bottomNav, navController)
        //底部导航设置点击事件
        //底部导航设置点击事件
        var bottomNav: BottomNavigationView = findViewById(R.id.bottom_nav)
        bottomNav.setOnNavigationItemSelectedListener { item ->
            navController!!.navigate(item.getItemId())
            true
        }

        bottomNav.itemTextAppearanceActive = R.style.bottom_selected_text;
        bottomNav.itemTextAppearanceInactive = R.style.bottom_normal_text;

    }

    /**
     * 初始化导航图表
     */
    private fun initNavGraph(provider:NavigatorProvider, fragmentNavigator:FixFragmentNavigator):NavGraph{

        val navGraph = NavGraph(NavGraphNavigator(provider))
        //用自定义的导航器来创建目的地
        val destination1 = fragmentNavigator.createDestination()
        destination1.id = R.id.navigation_home
        destination1.className = HomeFragment::class.java.canonicalName
        destination1.label = resources.getString(R.string.HomeFragment)
        navGraph.addDestination(destination1)

        val destination2 = fragmentNavigator.createDestination()
        destination2.id = R.id.navigation_faq
        destination2.className = FaqFragment::class.java.canonicalName
        destination2.label = resources.getString(R.string.FaqFragment)
        navGraph.addDestination(destination2)

        val destination3 = fragmentNavigator.createDestination()
        destination3.id = R.id.navigation_navi
        destination3.className = NavigationFragment::class.java.canonicalName
        destination3.label = resources.getString(R.string.NavigationFragment)
        navGraph.addDestination(destination3)

        val destination5 = fragmentNavigator.createDestination()
        destination5.id = R.id.navigation_mine
        destination5.className = UserFragment::class.java.canonicalName
        destination5.label = resources.getString(R.string.UserFragment)
        navGraph.addDestination(destination5)

        navGraph.startDestination = R.id.navigation_home

        return navGraph

    }

}

color/select_bottom_nav_color

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@color/color_0099ff" />
    <item android:color="@color/color_3e3e3e" android:state_selected="false" />
</selector>

menu/bottom_nav_menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_icon_home"
        android:title="首页" />

    <item
        android:id="@+id/navigation_faq"
        android:icon="@drawable/ic_icon_faq"
        android:title="问答" />

    <item
        android:id="@+id/navigation_navi"
        android:icon="@drawable/ic_icon_navigation"
        android:title="导航" />

    <item
        android:id="@+id/navigation_mine"
        android:icon="@drawable/ic_icon_mine"
        android:title="我的" />

</menu>

navigation/app_nav

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/app_nav"
    app:startDestination="@id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.wy.home.HomeFragment"
        android:label="HomeFragment"
        tools:layout="@layout/fragment_home"/>

    <fragment
        android:id="@+id/navigation_faq"
        android:name="com.wy.home.FaqFragment"
        android:label="FaqFragment"
        tools:layout="@layout/fragment_fqa"/>

    <fragment
        android:id="@+id/navigation_navi"
        android:name="com.wy.navigation.NavigationFragment"
        android:label="FaqFragment"
        tools:layout="@layout/fragment_navigation"/>

    <fragment
        android:id="@+id/navigation_mine"
        android:name="com.wy.user.UserFragment"
        android:label="UserFragment"
        tools:layout="@layout/fragment_user" />

</navigation>
上一篇下一篇

猜你喜欢

热点阅读