android 导航栏navigation

编程入门 行业动态 更新时间:2024-10-10 14:29:59

<a href=https://www.elefans.com/category/jswz/34/1771384.html style=android 导航栏navigation"/>

android 导航栏navigation

navigation有3个重要的组成部分:导航图 、NavHost  、NavController;

导航图即为xml文件

1、依赖:

dependencies {def nav_version = "2.4.1"// Java language implementationimplementation "androidx.navigation:navigation-fragment:$nav_version"implementation "androidx.navigation:navigation-ui:$nav_version"// Kotlinimplementation "androidx.navigation:navigation-fragment-ktx:$nav_version"implementation "androidx.navigation:navigation-ui-ktx:$nav_version"// Feature module Supportimplementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"// Testing NavigationandroidTestImplementation "androidx.navigation:navigation-testing:$nav_version"// Jetpack Compose Integrationimplementation "androidx.navigation:navigation-compose:$nav_version"
}

2、NavHost的xml文件创建:

        2.1、在“Project”窗口中,右键点击 res 目录,然后依次选择 New > Android Resource File。此时系统会显示 New Resource File 对话框。

        2.2、在 File name 字段中输入名称,例如“nav_graph”。

        2.3、从 Resource type 下拉列表中选择 Navigation,然后点击 OK。

        文件如下:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android=""xmlns:app=""android:id="@+id/nav_graph"app:startDestination="@id/homeFragment">表示第一个启动的fragment设置id,name是fragment的名称;例如我的:MeFragment<fragment android:id="@+id/homeFragment"android:name="com.onewave.boost.clean.fragment.MoneyFragment"/><fragment android:id="@+id/recordFragment"android:name="com.onewave.boost.clean.fragment.RecordFragment"/>
</navigation>

3、在activity布局中:

<RelativeLayout xmlns:android=""xmlns:tools=""xmlns:app=""   android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".activity.HomeActivity"><fragmentandroid:id="@+id/main_navigation"android:layout_width="match_parent"android:layout_height="match_parent"android:name="androidx.navigation.fragment.NavHostFragment"app:navGraph="@navigation/nav_graph"/>指定的NavHost
</RelativeLayout>

在main class中:

    @Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);Navigation.findNavController(this,R.id.main_navigation);}

至此,基本的使用已完成

  • 点击事件、跳转,导航栏

nav_graph.xml:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android=""xmlns:app=""xmlns:tools=""android:id="@+id/nav_graph"app:startDestination="@id/mefragment">//通用的2个事件:<action android:id="@+id/action_to_homefragment"app:destination="@id/homefragment"app:enterAnim="@anim/nav_default_pop_enter_anim"app:exitAnim="@anim/nav_default_pop_exit_anim"/><action android:id="@+id/action_to_mefragment"app:destination="@id/mefragment"app:enterAnim="@anim/nav_default_pop_enter_anim"app:exitAnim="@anim/nav_default_pop_exit_anim"/><fragment android:id="@+id/mefragment"android:name="com.imitate.shortvideo.myapplication.MeFragment"tools:layout="@layout/fragment_me"><deepLink app:uri="www.hao123.com/{params}"/></fragment><fragment android:id="@+id/homefragment"android:name="com.imitate.shortvideo.myapplication.HomeFragment"tools:layout="@layout/fragment_home"><argument android:name="name" android:defaultValue="max"/></fragment>
</navigation>

  • main activity布局文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=""xmlns:app=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><fragmentandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/main_fragment"android:name="androidx.navigation.fragment.NavHostFragment"app:navGraph="@navigation/nav_graph"app:defaultNavHost="true"/>导航栏<com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/main_nav_btn"android:layout_width="match_parent"android:layout_height="50dp"app:menu="@menu/menu"app:itemIconTint="drawble"  可以设置选中的颜色app:itemTextColor=""            字体颜色、大小都可以设置app:labelVisibilityMode="labeled"   导航栏显示图标和显示文字app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintVertical_bias="1"/></androidx.constraintlayout.widget.ConstraintLayout>

这里的menu是res目录下的menu文件夹menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android=""><itemandroid:id="@+id/mefragment"android:icon="@mipmap/ic_launcher"android:title="我的"/><itemandroid:id="@+id/homefragment"android:icon="@mipmap/ic_launcher"android:title="首页"/>
</menu>

我们需要在mainActivity中绑定容器和导航栏:

    private void initView() {BottomNavigationView navBtn=findViewById(R.id.main_nav_btn);NavController navController = Navigation.findNavController(this, R.id.main_fragment);这里如果我们需要对导航栏跳转时做判断,比如判断用户是否登录,未登录,就不跳转或者处理其他事件;
这里返回true,则表示拦截不跳转,false则正常跳转;navBtn.setOnItemSelectedListener(new    NavigationBarView.OnItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {switch (item.getItemId()){case R.id.homefragment:navController.navigate(R.id.action_to_homefragment);break;case R.id.mefragment:navController.navigate(R.id.action_to_mefragment);break;}
//                return true表示拦截,不让跳转,return true;}});
//        绑定navBtn和navControlNavigationUI.setupWithNavController(navBtn,navController);}

更多推荐

android 导航栏navigation

本文发布于:2023-06-17 10:17:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/756965.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:android   navigation

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!