美文网首页
Navigation

Navigation

作者: 闫鹏飞写字的地方 | 来源:发表于2021-09-02 14:24 被阅读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>
    

    相关文章

      网友评论

          本文标题:Navigation

          本文链接:https://www.haomeiwen.com/subject/wuzqwltx.html