Android 学习日记----jetpack---androidx.Navigation

Navigation概述:

导航是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。

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

导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。

NavHost:显示导航图中目标的空白容器。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。

NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController会安排 NavHost 中目标内容的交换。

在应用中导航时,您告诉 NavController,您想沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。NavController 便会在 NavHost 中显示相应目标。

导航组件提供各种其他优势,包括以下内容:

处理 Fragment 事务。

默认情况下,正确处理往返操作。

为动画和转换提供标准化资源。

实现和处理深层链接。

包括导航界面模式(例如抽屉式导航栏和底部导航),用户只需完成极少的额外工作。

Safe Args - 可在目标之间导航和传递数据时提供类型安全的 Gradle 插件。

ViewModel 支持 - 您可以将 ViewModel 的范围限定为导航图,以在图表的目标之间共享与界面相关的数据。

以上是谷歌官网的概述,这里是引用而简述,下面我们开始实际的使用示例吧!

官方navigation使用入门传送门

从官方文档中我们可以看出,navigation使用比较重要的三点就是

1:NavHost

2:NavHostFragment

3:NavController

同样我们首先要做的就是要在gradle中引入依赖如下:

//navigation

def nav_version ="2.3.0-alpha01"

// Java language implementation

implementation"androidx.navigation:navigation-fragment:$nav_version"

implementation"androidx.navigation:navigation-ui:$nav_version"

1:首先我们要做的前期工作就是要创建一个activity和两个fragment留着接下来使用。


2:点击同步之后,首先我们鼠标右键点击res->new->android Resoure File如下:



然后选择


3:创建好了之后,点击视图上面有一个添加fragment的按钮,点击添加我们刚才创建好的fragment,添加了第一个之后我们能够看到上面有一个窗口加小红×的标志点击添加第二个fragment

如下:


4:添加完成之后我们再次鼠标右键点击res->new->android Resoure File创建menu文件如下:


5:创建好之后我们添加两个item其xml文件如下

        android:id="@+id/iukFragment"

        android:icon="@android:drawable/ic_dialog_email"

        android:title="Iuk" />

        android:id="@+id/youFragment"

        android:icon="@drawable/ic_filter_vintage_black_24dp"

        android:title="you" />

我们需要注意的是两个item的id要分别和之前的两个fragment 的id对应相同

6:以上都准备完全了之后我们回到activity对应的布局文件中分别添加BottomNavigationView组件和fragment

布局文件如下:

    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=".navigation.NavigationActivity">

        android:id="@+id/fragment"

        android:name="androidx.navigation.fragment.NavHostFragment"

        android:layout_width="408dp"

        android:layout_height="688dp"

        app:defaultNavHost="true"

        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="1.0"

        app:navGraph="@navigation/nav_graph" />

        android:id="@+id/bottomNavigationView"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:background="#6e6e6e"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="1.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.995"

        app:menu="@menu/nav_menu">

需要注意的是fragment中的app:defaultNavHost="true"表示这个fragment是作为主容器,app:navGraph="@navigation/nav_graph" 设置导航文件。

BottomNavigationView中app:menu="@menu/nav_menu"设置按钮文件

7:现在我们要在activity中进行NavController操作了代码如下:

public class NavigationActivity extends AppCompatActivity {

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_navigation);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);

        NavController navController =Navigation.findNavController(this, R.id.fragment);

        AppBarConfiguration appBarConfiguration =new AppBarConfiguration.Builder(bottomNavigationView.getMenu()).build();

//进行界面绑定

NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

        NavigationUI.setupWithNavController(bottomNavigationView, navController);

    }

}

当这一切都准备完成了之后一个简单的navigation示例就完成了,接下来运行看看吧!

点击左边按钮效果如下,


点击右边按钮下过如下:


好了,到达了我们想要的效果了,是不是很简单,快快用到你的项目中去吧!

想要demo的同学可以到这里来,github传送门这里有前面两篇文章将的demo都在里面,想要的同学都可以下载。

你可能感兴趣的:(Android 学习日记----jetpack---androidx.Navigation)