navigation的使用细节

 引入依赖库

这里是Java语言依赖的库

 //navigation
    implementation 'androidx.navigation:navigation-fragment:2.3.0'
    implementation 'androidx.navigation:navigation-ui:2.3.0'

kotlin:

 // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

注意版本号;编译完成之后就可以引用了熬;

创建导航视图

在“Project”目录中,右键点击 res 目录,然后依次选择 New > Android Resource File。此时系统会显示New Resource File 对话框。
在 File name 字段中输入名称,例如“nav_graph”。
从 Resource type 下拉列表中选择 Navigation,然后点击 OK。

建好是这个样子的 

<?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/ProjectFragment">
    <fragment
        android:id="@+id/ProjectFragment"
        android:name="com.hhmy.atommotionapp.ui.fragment.project.ProjectFragment"
        android:label="fragment_navigation_main"
        tools:layout="@layout/fragment_pro" >
        <action
            android:id="@+id/action_navigationMainFragment_to_navigationSecondFragment"
            app:destination="@id/ProgramFragment" />
        <action
            android:id="@+id/action_navigationMainFragment_to_sysFragment"
            app:destination="@id/sysFragment" />
        <action
            android:id="@+id/action_navigationMainFragment_to_functionFragment"
            app:destination="@id/functionFragment" />
        <action
            android:id="@+id/action_navigationMainFragment_to_warnFragment"
            app:destination="@id/warnFragment" />
        <action
            android:id="@+id/action_navigationMainFragment_to_MonitorIOFragment"
            app:destination="@id/MonitorIOFragment" />
    </fragment>
  <fragment
        android:id="@+id/ProgramFragment"
        android:name="com.hhmy.test.ui.fragment.project.ProgramFragment"
        android:label="fragment_navigation_second"
        tools:layout="@layout/fragment_program" />
    <fragment
        android:id="@+id/sysFragment"
        android:name="com.hhmy.test.ui.fragment.SysFragment"
        android:label="fragment_sys_thrid"
        tools:layout="@layout/fragment_sys"></fragment>
    ...
</navigation>

这里需要注意的事导航的时候有一个app:startDestination="@id/ProjectFragment"这个是初始fragment,再有就是使用navigation的时候可以直接使用action的id,也可以导航到fragment的id。

在xml布局里引入容器NavHostFragment:

<fragment
                        android:id="@+id/nav_host_fragment"
                        android:name="androidx.navigation.fragment.NavHostFragment"
                        android:layout_width="match_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1"
                        app:defaultNavHost="true"
                        app:navGraph="@navigation/nav_graph" />

在这里其实就已经可以使用navigation这个工具了,在activity里:

Navigation.findNavController(NavigationActivity.this,R.id.nav_host_fragment)
        //导航
        .navigate(R.id.ProgramFragment);

在fragment里:

Navigation.findNavController(getView())
        .navigateUp();

只不过为了进一步集成视图操作,官方又提供了两个控件:

BottomNavigationView 和 NavigationRailView 前者用于手机项目,后者用于平板(大屏)设备较多,我们公司的项目主要是平板设备上的开发,所以引用后者;

接着看activity的xml(其他代码自动过滤了,跟平常的布局一样即可)

....  
 <com.google.android.material.navigationrail.NavigationRailView
                android:id="@+id/navigation_rail_view"
                android:layout_width="100dp"
                android:layout_height="match_parent"
                app:headerLayout="@layout/test_header_layout"
                app:labelVisibilityMode="labeled"
                app:menu="@menu/test_menu"
                app:theme="@style/myNavigationDrawerStyle"
                app:itemIconSize="15dp"
                android:paddingBottom="10dp"
                android:background="@color/main_backcolor"
                />
...

手机上比较多的是bottomview不过用法是一样的;同一套东西,一个大屏一个小屏而已;如果到这你会发现menu那行爆红,是因为没有引入导航的菜单,配置菜单如下:

添加menu

 依然是在这里新建一个menu项目,然后再在菜单里添加项目(item)

<?xml version="1.0" encoding="utf-8"?>
<menu 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">
<group
    android:id="@+id/Test_group"
    android:checkableBehavior="none"
    android:checkable="false"
    >
    <item
        android:id="@+id/projectFragment"
        android:title="@string/project"
        android:icon="@drawable/project"
        />
    <item
        android:id="@+id/programfragment"
        android:title="@string/program"
        android:icon="@drawable/program2"
        />
    <item
        android:id="@+id/variablesFragment"
        android:title="@string/variable"
        android:icon="@drawable/var"
        />
    <item
        android:id="@+id/IOfragment"
        android:title="@string/monitor"
        android:icon="@drawable/monitor"/>
    <item
        android:id="@+id/tranfragment"
        android:title="@string/debug"
        android:icon="@drawable/tran"/>
    <item
        android:id="@+id/Functionfragment"
        android:title="@string/function"
        android:icon="@drawable/gongnengkuai"/>
    <item
        android:id="@+id/Alarmfragment"
        android:title="@string/alarm"
        android:icon="@drawable/alarm"/>
</group>
</menu>

一个group就是一个分组,如果需要给项目项分组注意一下使用;到这里这个控件的基本使用就完成了,因为是官方控件所以限制比较多,比如不能给单项item设置背景色(另一篇文章给了解决方案单项背景色),菜单项目最大数量等等一些坑,还需要使用前酌情考虑,

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,我们可以得出以下结论: 1. 引用\[1\]中提到了一个名为Vec2D的类,它实际上是一个元组。在TNavigator类中,Vec2D被用于表示不同方向的起始朝向。 2. 引用\[2\]提到了Navigation2具有许多参数,可以用来改变不同机器人的性能。虽然与ROS1 Navigation类似,但更多细节可以参考Navigation2的配置指南或ROS Navigation Tuning Guide。 3. 引用\[3\]中提到了一个名为Turtle的类,它是RawTurtle的子类。当创建一个Turtle对象或调用从Turtle方法派生的函数时,会自动创建一个TurtleScreen对象。 综上所述,"navigation2 turtle"可能是指在Navigation2中使用Turtle类进行机器人导航的一种方式。 #### 引用[.reference_title] - *1* *3* [Python turtle库实现基本剖析](https://blog.csdn.net/A757291228/article/details/106176893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Turtlebot3-burger入门教程#foxy版#-Navigation2调参](https://blog.csdn.net/ncnynl/article/details/125804722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值