美文网首页
android navigation 学习笔记1

android navigation 学习笔记1

作者: Xigong | 来源:发表于2018-08-27 00:38 被阅读0次

    android navigation 官方地址
    https://developer.android.google.cn/topic/libraries/architecture/navigation/

    导航相关基本概念:

    1. 目的地 Destination

    就是跳转到哪儿,可以是fragment,或者是activity
    必须定义在xml 中,后面会讲解

    2. 行为 Action,

    定义跳转这个行为,可以配置一些跳转参数
    必须定义在xml 中,后面会讲解

    使用入门;

    0. 环境配置

    • 使用 [Android Studio 3.2 Canary 14 或更高的版本
    • 引用 navigation 库
    def nav_version = "1.0.0-alpha01"
    implementation "android.arch.navigation:navigation-fragment:$nav_version" // use -ktx for Kotlin
    mplementation "android.arch.navigation:navigation-ui:$nav_version" // use -ktx for Kotlin
    

    1.navigation 配置文件定义

    需要在res 目录下新建目录navigation
    然后在res/navigation 新建一个xml文件,例如 navigation.xml
    在navigation.xml 中定义action 和destination ,例如

    <?xml version="1.0" encoding="utf-8"?>
    <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/title_screen">
    
    <-- app:startDestination 表示导航栈的栈底是那个目的地(fragment/activity)--/>
    
    <--定义了id为title_screen 是一个fragment 的目的地--/>
        <fragment
                android:id="@+id/title_screen"
                android:name="com.example.android.navigationsample.TitleScreen"
                android:label="fragment_title_screen"
                tools:layout="@layout/fragment_title_screen">
    <--定义了跳转行为,app:destionation 的值,是目的地的id,为注册的fragment-->
            <action
                    android:id="@+id/action_title_screen_to_register"
                    app:destination="@id/register"
                    app:popEnterAnim="@anim/slide_in_left"
                    app:popExitAnim="@anim/slide_out_right"
                    app:enterAnim="@anim/slide_in_right"
                    app:exitAnim="@anim/slide_out_left"/>
         
        </fragment>
        <fragment
                android:id="@+id/register"
                android:name="com.example.android.navigationsample.Register"
                android:label="fragment_register"/>
    </navigation>
    
    

    2. 在activity 中配置

    在布局文件中定义导航器

    
    <FrameLayout
        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:background="@android:color/background_light"
        tools:context="com.example.android.navigationsample.MainActivity">
    
    <--NavHostFragment 是navigation 库提供的容器fragment,
    app:navGraph 定义了这个导航器的配置文件id-->
        <fragment
                android:id="@+id/my_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_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:navGraph="@navigation/navigation"/>
    </FrameLayout>
    

    3. 发起跳转

    // 跳转到注册的fragment
    Navigation.findNavController(view).navigate(R.id.register);
    

    相关文章

      网友评论

          本文标题:android navigation 学习笔记1

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