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);
网友评论