引入依赖库
这里是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设置背景色(另一篇文章给了解决方案单项背景色),菜单项目最大数量等等一些坑,还需要使用前酌情考虑,