当前位置: 首页 > news >正文

偃师网站建设国外网站设计理念

偃师网站建设,国外网站设计理念,自建wordpress,自己有服务器怎么做网站一. Navigation 组件的介绍 1.1 什么是 Navigation 组件 Navigation 组件是一种 Android Jetpack 库#xff0c;它可以帮助开发者轻松地实现应用程序中的导航功能。导航组件包含多个类和组件#xff0c;包括导航图、目的地、导航控制器等#xff0c;可以帮助我们管理应用程… 一. Navigation 组件的介绍 1.1 什么是 Navigation 组件 Navigation 组件是一种 Android Jetpack 库它可以帮助开发者轻松地实现应用程序中的导航功能。导航组件包含多个类和组件包括导航图、目的地、导航控制器等可以帮助我们管理应用程序中的页面导航和任务导航。通过使用 Navigation 组件我们可以更加方便地实现应用程序的导航功能同时也可以提高应用程序的用户体验。在本篇文章中我们将介绍如何使用 Navigation 组件来实现应用程序导航并提供一些示例和更多的扩展功能。 1.2 Navigation 组件的优势 Navigation 组件可以轻松实现应用程序中的导航包括页面之间的转换和应用程序内部的导航。Navigation 组件可以提高应用程序的可维护性和可扩展性因为它们使得应用程序的结构更加清晰并且可以更容易地添加新的功能和页面。Navigation 组件可以提供一致的用户体验因为它们使用了标准的导航模式和动画效果。Navigation 组件可以帮助开发人员更快地构建应用程序因为它们提供了许多常见的导航模式和功能可以直接使用或进行修改。Navigation 组件可以提高应用程序的可测试性因为它们使得页面之间的导航和状态转换更加明确和可控。 1.3 Navigation 组件主要由3个部分组成 NavHost用来嵌入导航流程的容器,一般使用FragmentContainerView。NavController负责在NavHost内部处理导航事务的控制器用于执行页面跳转、管理返回栈等。NavGraph描述Fragment之间导航关系的资源文件在其中定义页面之间的转跳、动画等。一般放在res/navigation/目录下。 简而言之Navigation组件通过在NavHost中使用NavGraph来描述Fragment导航路径与关系然后由NavController来执行实际的导航工作这样极大地简化了以往的页面跳转逻辑和回退栈管理流程。 二. Navigation 组件的基本使用 2.1 添加导航组件到项目中 在项目的 build.gradle 文件中添加以下依赖 dependencies {def nav_version 2.5.3implementation androidx.navigation:navigation-fragment-ktx:$nav_versionimplementation androidx.navigation:navigation-ui-ktx:$nav_version }在布局文件中添加 NavHostFragment androidx.fragment.app.FragmentContainerViewandroid:idid/nav_host_fragmentandroid:nameandroidx.navigation.fragment.NavHostFragmentandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentapp:navGraphnavigation/nav_graph /正确获取 NavController 对象 在 Activity 内使用 NavController 时,应在onCreate()中获取: val navHostFragment supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController navHostFragment.navController NavigationUI.setupActionBarWithNavController(this, navController)而在 Fragment 内,应在onAttach()或onViewCreate()中获取: val navHostFragment parentFragment as NavHostFragment val navController navHostFragment.navControllerNavHost需要指定app:navGraph属性来关联一个导航图NavGraph这决定了其中Fragment页面之间的导航关系和跳转路径。 NavController是 Navigation组件的控制中心用于在NavHost内执行导航操作。可以在Activity或Fragment中通过NavHostFragment的navController属性获取对应的NavController实例。 常见的导航操作有: 导航到目标目的地navController.navigate(R.id.destination_id)回退一个目的地navController.navigateUp() 或 navController.popBackStack()回退到根目的地navController.popBackStack(R.id.root_destination, false) NavController还负责维护Fragment的回退栈以及在按返回按钮时正确出栈这大大简化了之前管理Fragment事务的复杂度。 通过NavHost和NavController的配合Navigation组件实现了在NavGraph中声明的导航逻辑和页面切换功能。这使Fragment之间的导航变得极为简单高效。开发者只需关注于定义NavGraph并调用NavController中的导航方法即可实现页面跳转,其余的一切尽在Navigation组件的掌控之中。 2.2 创建导航图 在XML文件中创建导航图 androidx.fragment.app.FragmentContainerViewandroid:idid/nav_host_fragmentandroid:nameandroidx.navigation.fragment.NavHostFragmentandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentapp:navGraphnavigation/nav_graph /在res文件夹下创建一个navigation文件夹然后在该文件夹下创建一个nav_graph.xml文件用于定义导航图的结构和内容 navigation xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:idid/nav_graphapp:startDestinationid/firstFragmentfragmentandroid:idid/firstFragmentandroid:namecom.smallmarker.jetpackpractice.navigation.fragment.FirstFragmentandroid:labelFirsttools:layoutlayout/fragment_firstactionandroid:idid/action_firstFragment_to_secondFragmentapp:destinationid/secondFragment //fragmentfragmentandroid:idid/secondFragmentandroid:namecom.smallmarker.jetpackpractice.navigation.fragment.SecondFragmentandroid:labelSecondtools:layoutlayout/fragment_second //navigation在导航图中fragment 元素用于定义目的地android:id属性用于指定目的地的唯一标识符android:name 属性用于指定目的地的类名android:label 属性用于指定目的地在应用程序中显示的标签名称。 action 元素用于定义动作android:id 属性用于指定动作的唯一标识符app:destination 属性用于指定动作要执行的目的地。 三. Navigation 组件的高级使用 3.1 深层链接 在 Android 中深层链接是指将用户直接转到应用内特定目的地的链接。借助 Navigation 组件您可以创建两种不同类型的深层链接显式深层链接和隐式深层链接。 创建显式深层链接 显式深层链接是深层链接的一个实例该实例使用 PendingIntent 将用户转到应用内的特定位置。例如您可以在通知或应用 widget 中显示显式深层链接。 val pendingIntent NavDeepLinkBuilder(it).setGraph(R.navigation.nav_deep_link).setDestination(R.id.deepLinkFragment).setArguments(Bundle().apply {putInt(id, 1)}).setComponentName(DeepLinkActivity::class.java).createPendingIntent()val notification NotificationCompat.Builder(it, my_channel).setContentTitle(Title).setContentText(测试深层链接).setSmallIcon(R.mipmap.ic_launcher).setContentIntent(pendingIntent).build()NotificationManagerCompat.from(it).notify(Random.nextInt(10), notification)该示例使用 NavDeepLinkBuilder 类构造 PendingIntent, 添加到通知中并发送点击通知跳转指定页面。 创建隐式深层链接 navigation xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:idid/nav_deep_linkapp:startDestinationid/deepLinkFragmentfragmentandroid:idid/deepLinkFragmentandroid:namecom.smallmarker.jetpackpractice.navigation.fragment.DeepLinkFragmentandroid:labelDeepLinktools:layoutlayout/fragment_deep_linkdeepLink app:uriexample://deepLink/{id} //fragment/navigation如需启用隐式深层链接您还必须向应用的 manifest.xml 文件中添加内容。将一个 nav-graph 元素添加到指向现有导航图的 activity如以下示例所示。 activityandroid:name.navigation.DeepLinkActivityandroid:exportedtruenav-graph android:valuenavigation/nav_deep_link / /activity在这个例子中我们定义了一个深度链接它的 URI 是example://deepLink/{id}其中{itemId}是一个参数。当用户在浏览器或其他应用中点击这个链接时Android 系统会自动打开我们的应用并跳转到对应的页面同时将参数传递给我们的应用。我们可以在目标页面中通过arguments来获取这个参数。 3.2 共享元素转场 共享元素转场可以实现在不同Activity或Fragment之间共享相同元素的动画效果比如在列表页面点击某个item进入详情页面时可以让这个item的图片或文字在两个页面之间平滑地过渡。以下是一个简单的实现示例 !-- 在layout文件中定义共享元素的id --ImageView android:idid/image_viewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:transitionNameshared_element /到 Fragment 目的地的共享元素过渡 val extras FragmentNavigatorExtras(view1 to shared_element)view.findNavController().navigate(R.id.confirmationAction, null, null, extras)到 Activity 目的地的共享元素过渡 val option ActivityOptionsCompat.makeSceneTransitionAnimation(activity, imageView, shared_element)findNavController().navigate(R.id.shareElementDialog, null, null, ActivityNavigatorExtras(option))共享元素以程序化方式提供而不是通过导航 XML 文件提供。activity 和 fragment 目的地各自都有 Navigator.Extras 接口的一个子类它接受导航的附加选项包括共享元素。您可以在调用 navigate() 时传递这些 Extras。 3.3 导航图的动态构建- 动态构建导航图可以在运行时根据不同的条件创建不同的导航图例如用户登录状态不同、权限不同等情况下展示不同的导航结构。 下面是一个简单的动态构建导航图的示例 val navHostFragment supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragmentval navController navHostFragment.navControllerval graph navInflater.inflate(R.navigation.dynamic_nav_graph)if (isLoggedIn) {graph.startDestination R.id.homeFragment} else {graph.startDestination R.id.loginFragment}if (hasAdminPermissions) {val adminNode NavGraphNavigator(navController.navigatorProvider.getNavigator(NavGraphNavigator::class.java)).createDestination()adminNode.id R.id.adminFragmentadminNode.setClassName(com.example.app.AdminFragment)graph.addDestination(adminNode)graph.addEdge(R.id.homeFragment, R.id.adminFragment)}navController.graph graph在上面的示例中我们首先获取到了当前的NavController和NavInflater然后通过NavInflater.inflate方法来加载我们的动态导航图。接着我们根据不同的条件设置了导航图的起始目的地并且在有管理员权限的情况下动态添加了一个目的地并且添加了一条边来连接这个目的地和主页。最后我们将构建好的导航图设置到NavController中即可。 四. 导航组件的最佳实践 4.1 使用include标签 为每个模块定义单独的NavGraph在大型项目中,最好为每个功能模块定义自己的NavGraph,然后在根NavGraph中使用include标签将每个模块的NavGraph组合起来: navigation xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoandroid:idid/root_navigationinclude android:idid/home_navigationapp:layoutnavigation/home_navigation /include android:idid/profile_navigationapp:layoutnavigation/profile_navigation / /navigation4.1 使用 ViewModel 和 LiveData 在 ViewModel 中使用 LiveData 对象来处理导航事件 class MainViewModel : ViewModel() {private val navigateTo MutableLiveDataNavDirections()fun getNavigateTo(): LiveDataNavDirections {return navigateTo}fun setNavigateTo(directions: NavDirections) {navigateTo.value directions}}在 Fragment 中观察 LiveData 对象并处理导航事件 class MainFragment : Fragment() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)viewModel.getNavigateTo().observe(this) {Navigation.findNavController(requireView()).navigate(it)}}fun clickJump() {viewModel.setNavigateTo(MainFragmentDirections.actionMainToNavigationActivity())}}注意这里我们使用了 Safe Args 实现类型安全的导航在目的地之间导航官方也是建议使用 Safe Args Gradle 插件。此插件可生成简单的对象和构建器类以便在目的地之间实现类型安全的导航。我们强烈建议您在导航以及在目的地之间传递数据时使用 Safe Args。 如需将 Safe Args 添加到您的项目请在顶层 build.gradle 文件中包含以下 classpath buildscript {dependencies {def nav_version 2.5.3classpath(androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version)} }然后再将以下行添加到应用或模块的 build.gradle 文件中 plugins {id(androidx.navigation.safeargs.kotlin) }五. 总结 5.1 导航组件的优势和适用场景 优势适用场景1. 提供一致的导航体验适用于需要在应用中引入多个页面的场景2. 简化导航逻辑适用于需要在应用中进行复杂的导航操作的场景3. 可自定义外观和行为适用于需要根据应用需求自定义导航栏的场景4. 支持深层链接适用于需要在应用中支持深层链接的场景 5.2 导航组件的最佳实践- 在使用导航组件时应该尽量减少手动操作 Fragment 事务而是使用导航组件提供的 API 进行操作以避免出现不必要的错误。 在设计导航图时应该尽量将功能相似的页面放在同一个导航图中以便于管理和维护。在使用 Safe Args 插件传递参数时应该尽量使用安全的类型以避免出现类型转换错误。 以上就是对 Android Navigation 的探索与实践的过程上述示例 扩展结合 BottomNavigationView 和 DrawerLayout请参考 https://github.com/smallmarker/JetPackPractice
http://www.ho-use.cn/article/10823835.html

相关文章:

  • rp做网站郑州小程序设计外包
  • 东莞网站建设 光龙个人网站 建设方案书
  • 杭州自助建站济南外贸网站建设公司排名
  • 建设校园门户网站方案小门户网站模版
  • 网站推广方式案例误入网站退不了怎么做
  • 地区性门户网站是什么意思建一个门户网站多少钱
  • 如何做公司自己的网站小程序入口在哪里
  • 兰州优化网站公司所有网站都能进的浏览器
  • 营销网站方案设计北碚区网络营销推广公司
  • 建筑公司网站图片天眼查公司查询
  • 企业网站提供商wordpress主题太大
  • 广西医科大学网站建设仙居网站建设贴吧
  • 形容网站开发的词分享类网站源码
  • 南开网站建设公司怎么建好网站
  • aspnet网站开发实例wordpress模板是什么
  • wordpress没法做大网站wordpress怎么上传图片
  • 长沙网站空间合肥网站建设求职简历
  • 成都网站建设前50强网页版微信登录显示二维码失效
  • 怎么建立视频网站wordpress企业网站开发
  • 四川微信网站建设推西部数据网站空间
  • 同类色相的网站网站开发项目建设经验
  • 织梦网站模板还原的文件在哪里软件开发公司好的有哪些
  • 做网站策划薪酬韩国最新新闻消息
  • 房地产公司 网站建设七牛云免费服务器
  • 网站关键词分析网络营销方式方法
  • 便利的微网站建设企业建网站设计
  • react做的电商网站能上线吗格尔木市公司网站建设
  • 中国工程建设监理网站wordpress主题合并
  • 微网站的制作过程重庆找工作哪个网站好
  • 京东电子商务网站建设目的贵阳做网站需要多少钱