Android 新的组件框架Navigation

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

Android 新的组件框架Navigation_第1张图片

使用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布局:

Android 新的组件框架Navigation_第2张图片

接着新建两个Fragment和一个Activity

Android 新的组件框架Navigation_第3张图片

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

Android 新的组件框架Navigation_第4张图片

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

Android 新的组件框架Navigation_第5张图片

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

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

    

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

                  android:label="@string/menu1_title"

                   tools:layout="@layout/fragment_menu1"

    />

      

        ....framgent2

    />

 

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

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

结合ToolBar和navigationView

Android 新的组件框架Navigation_第6张图片
menu

    

    

    

  

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

activity代码修改为:

Android 新的组件框架Navigation_第7张图片

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

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

你可能感兴趣的:(Android 新的组件框架Navigation)