美文网首页
Android 新的组件框架Navigation

Android 新的组件框架Navigation

作者: graychen | 来源:发表于2018-08-08 18:08 被阅读0次

        Google 2018 I/O大会上,谷歌隆重推出一个新的架构组件:Navigation。从名字上可以看出他是一个导航,其实我们可以把它理解为FragmentNavigation。它提供了多Fragment之间的转场,栈管理,帮助你更轻松的使用Fragment。在以后抽屉式导航栏,底部、顶部导航栏的需求中我们可以尝试使用这个新组件。甚至,你可以尝试写一个单Activity的应用。

    使用Navigation需要AndroidStudio的版本3.2以上

    在Module下的build.gradle中添加以下依赖:

    dependencies {

         implementation "android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha04"

         implementation "android.arch.navigation:navigation-ui-ktx:1.0.0-alpha04"

    }

        然后新建一个Activity,需要用到 NavHost 来托管 Navigation,NavHost 是个接口,默认是用 NavHostFragment 来托管,NavHostFragment 是实现了 NavHost 接口的,查看 NavHostFragment 会看到,在注释里他已经提供了简单的activity布局写法。NavigationMainActivity布局:

    接着新建两个Fragment和一个Activity

    然后res目录右键选择new -> Android Resource File

    这个时候在res目录下会产生navigation文件夹并生成一个nav_graden文件

    在这个文件下,我们将Fragment关联进去,

    <navigation 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"

        app:startDestination="@+id/menu1_fragment"

        android:id="@+id/nav_garden">

        <fragment android:id="@+id/menu1_fragment"

                      android:name="com.test.navigation.Menu1Fragment"

                      android:label="@string/menu1_title"

                       tools:layout="@layout/fragment_menu1"

        />

          <fragment 

            ....framgent2

        />

     </navigation>

        这里面的name是fragment的类名;tools:layout就是关联fragment的layout文件。

    navigation必须要设置 app:startDestination,这是给导航指定起始位置的,不然会奔溃报错。

    结合ToolBar和navigationView

    menu

    <?xml version="1.0" encoding="utf-8"?>

    <menu xmlns:android="http://schemas.android.com/apk/res/android">

        <!--id 对应navigation的id-->

        <item android:id="@id/menu1_fragment" android:title="@string/menu1_title"/>

        <item android:id="@id/menu2_fragment" android:title="@string/menu2_title"/>

    </menu>  

    这样NavigationView 的app:menu="@menu/menu_navigation"也创建好了。注意menu这里的id需要和navigation的id对应

    activity代码修改为:

    Navigation 可以和 Toolbar 相结合,Toolbar 左边会出现个返回的箭头,这样箭头的显示和隐藏控制都不用我们去写了。 用 Toolbar 的话 Activity 的 style 要设置 NoActionBar 的

    这里用到了 NavigationUI 的setupActionBarWithNavController(AppCompatActivity activity, NavController navController) 方法,还覆盖了 onSupportNavigateUp() 方法。是因为在宿主activity里需要重写onSupportNavigateUp方法去启动fragment

    相关文章

      网友评论

          本文标题:Android 新的组件框架Navigation

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