欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android navigation 学习笔记1

程序员文章站 2024-02-10 23:37:46
...

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);

转载于:https://www.jianshu.com/p/23b2e9a1a317