Navigation的使用

Navigation


使用条件: AndroidStudio version >= 3.3

一种交互允许用户在应用程序中的不同内容之间进行浏览,浏览和退出。

导航组件由以下三个关键部分组成:

  • 导航图:在一个集中位置包含所有与导航有关的信息的一种XML资源。这包括您应用程序中的所有单独内容区域(称为destinations),以及用户可以通过您的应用程序访问的可能路径。

  • NavHost:一个空容器,用于显示导航图中的目的地。导航组件包含一个默认NavHost实现 NavHostFragment,它显示片段目的地。

  • NavController: 在NavHost中管理应用程序导航的对象 。 当用户在整个应用程序中移动时,NavController在NavHost中协调目标内容的交换 。

    MainActivity中 activity_main.xml 资源:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <androidx.appcompat.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints"
        />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:ignore="MissingConstraints"
        app:defaultNavHost= "true"
        app:navGraph="@navigation/nav_graph"
        />

</androidx.constraintlayout.widget.ConstraintLayout>
  • android:name属性包含您的NavHost 实现的类名称。
  • app:navGraph属性将关联到NavHostFragment导航图。导航图指定了NavHostFragment用户可以导航到的所有目的地。
  • app:defaultNavHost="true"属性确保您NavHostFragment 拦截系统的“后退”按钮。请注意,NavHost默认值只能是一个。如果您在同一布局中有多个主机(例如,两窗格布局),请确保仅指定一个default NavHost

建立导航图

  1. 在“项目”窗口中,右键单击res目录,然后选择“ 新建”>“ Android Resource File ”。出现“ 新资源文件”对话框。
  2. 在“ File name ”字段中键入一个名称,例如“ nav_graph”。
  3. 从资源类型下拉列表中选择 Navigation ,然后单击确定
<?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"
    android:id="@+id/nav_graph">

</navigation>

建立、连接目的地

通过nav_graph中的Design 选项,点击白绿“+”,出现"Create new destination",可以建立Fragment

然后可以通过“ 房子 ”符号或者右键set as Start destination建立启动目的地

连接目的地,只要选中Design区域的Fragment页,右侧会出现圆形按钮,按需求连线建立对应关系就可以了

例如:

<?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"
    android:id="@+id/nav_graph"
    app:startDestination="@id/blankFragment">

    <fragment
        android:id="@+id/blankFragment"
        android:name="com.fight.navigation.BlankFragment"
        android:label="fragment_blank"
        tools:layout="@layout/fragment_blank" >
        <action
            android:id="@+id/action_blankFragment_to_whiteFragment"
            app:destination="@id/whiteFragment" />
    </fragment>
    <fragment
        android:id="@+id/whiteFragment"
        android:name="com.fight.navigation.BlankFragment"
        android:label="fragment_white"
        tools:layout="@layout/fragment_blank">
      
    </fragment>

</navigation>

导航到目的地

Java

手势导航

从Android 10(API级别29)开始,Android系统支持完全基于手势的导航。应用程序开发人员应做两件事以确保其应用程序与此功能兼容:

  • 将应用程序内容从一个边缘扩展到另一个边缘。
  • 处理冲突的应用手势
边缘到边缘的应用程序内容

为了利用浮动导航栏提供的额外屏幕空间,您需要对应用程序进行一些更改。

设置透明系统栏

您可以通过在主题中设置以下值来实现( API目标级别为29或更高 ):

边缘到边缘的应用程序内容
为了利用浮动导航栏提供的额外屏幕空间,您需要对应用程序进行一些更改。

设置透明系统栏
您可以通过在主题中设置以下值来实现:

<!-- values-29/themes.xml: -->

<style name="AppTheme" parent="...">
    <item name="android:navigationBarColor">@android:color/transparent</item>

    <!-- Optional, but recommended for full edge-to-edge rendering -->
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

或者 可以使用Window.setNavigationBarColor()Window.setStatusBarColor() 来动态地执行此操作

设置UI可见性标志

为了能够边到边布置视图,应用必须告知系统该应用可以处理这种视图。您可以通过View.setSystemUiVisibility() 设置以下标志来完成此操作 :

STABLE)

这些标志一起告诉系统,你的应用程序应该全屏显示,就像导航栏和状态栏不存在一样。对于其他全屏事件,您还可以设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN,它允许您在状态栏后面绘图。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章