Android仿微信5实现滑动导航条

Android仿微信5实现滑动导航条

简介

本文主要介绍如何使用Android Studio开发一个仿微信5的滑动导航条,包括悬浮指示器,顶部导航栏,以及各个页面内容的显示等,方便开发者在自己的应用中快速实现类似的功能。

开发步骤

  1. 新建Android Studio项目。在创建项目的时候,需要选择“Bottom Navigation Activity”模板,这个模板已经默认提供了底部导航栏,可以快速实现滑动导航条的效果。

  2. 修改布局文件。打开activity_main.xml文件,布局文件中已经存在底部导航栏的代码,需要在其中加入顶部导航栏,并编写相应的样式代码。示例如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <include layout="@layout/layout_top_toolbar"/>

    <FrameLayout
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/bottom_nav"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/top_toolbar"
        app:navGraph="@navigation/mobile_navigation" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_nav"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:labelVisibilityMode="unlabeled"
        app:itemIconTint="@color/bottom_nav_color_selector"
        app:itemTextColor="@color/bottom_nav_color_selector"
        app:menu="@menu/bottom_nav_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>

使用include标签引入了名为layout_top_toolbar.xml的内容,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/top_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    app:title="微信"
    app:titleTextColor="@android:color/white" />

其中,layout_top_toolbar.xml中定义了一个支持返回的Toolbar。在activity_main.xml中通过引用,将其展示在顶部位置。另外,修改app:labelVisibilityMode="unlabeled"可以隐藏底部导航栏的文字标签。

  1. 定义滑动导航条中各页面之间的切换。在res/navigation/目录下新建mobile_navigation.xml文件,在该文件中编写需要展示的各个页面的代码。示例如下:
<?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/mobile_navigation"
    app:startDestination="@id/navigation_home">

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.example.app.ui.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/navigation_dashboard"
        android:name="com.example.app.ui.dashboard.DashboardFragment"
        android:label="@string/title_dashboard"
        tools:layout="@layout/fragment_dashboard" />

    <fragment
        android:id="@+id/navigation_notifications"
        android:name="com.example.app.ui.notifications.NotificationsFragment"
        android:label="@string/title_notifications"
        tools:layout="@layout/fragment_notifications" />
</navigation>
  1. 在MainActivity中实现滑动导航条。在MainActivity中,需要将顶部导航栏与底部导航栏关联起来,在导航栏切换的时候显示相应的页面内容。示例如下:
class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar: Toolbar = findViewById(R.id.top_toolbar)
        setSupportActionBar(toolbar)

        val navController = findNavController(R.id.nav_host_fragment)
        appBarConfiguration = AppBarConfiguration(navController.graph)
        setupActionBarWithNavController(navController, appBarConfiguration)

        val bottomNav: BottomNavigationView = findViewById(R.id.bottom_nav)
        bottomNav.setupWithNavController(navController)
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment)
        return navController.navigateUp(appBarConfiguration)
                || super.onSupportNavigateUp()
    }
}

在onCreate()方法中,先是找到activity_main.xml中的各个控件对象,然后通过setupWithNavController()方法将底部导航栏与NavController对象关联。在关联之后,就可以通过点击底部导航栏的各个项目,切换到相应的页面。

至此,仿微信5实现滑动导航条的开发就已经完成了。

示例说明

示例1:改变导航栏图标颜色

如果要改变底部导航栏的图标颜色,需要在res/color/目录下新建一个选择器文件bottom_nav_color_selector.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_checked="true"/>
    <item android:color="@android:color/darker_gray" android:state_checked="false"/>
</selector>

这个选择器文件指定底部导航栏中选中图标的颜色为colorAccent,未选中的图标颜色为darker_gray。

示例2:添加页面内容

如果需要添加新的页面内容,需要做如下步骤:

  1. 在res/layout/目录下新建一个布局文件,定义页面显示内容。

  2. 在res/menu/目录下新建一个菜单文件,定义底部导航栏中显示的图标和标签。

  3. 在mobile_navigation.xml中添加相应的指向新页面的Fragment。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android仿微信5实现滑动导航条 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • SpringBoot中时间类型 序列化、反序列化、格式处理示例代码

    下面我就来为您详细讲解“SpringBoot中时间类型 序列化、反序列化、格式处理示例代码”的完整攻略。 1. 背景介绍 在实际开发中,我们经常会遇到时间类型的序列化、反序列化、格式处理问题,SpringBoot在处理时间类型时提供了很多便利,本文将介绍SpringBoot中时间类型的序列化、反序列化、格式处理示例代码。 2. 时间类型的序列化 在Sprin…

    Java 2023年5月20日
    00
  • 实例详解JSON取值(key是中文或者数字)方式

    好的!JSON是一种常用的数据格式,在前端开发中经常会用到。本篇攻略主要介绍如何在JSON中取值,并且针对key是中文或数字的情况进行详细讲解,下面开始具体介绍。 JSON简介 JSON是JavaScript对象表示法的缩写,是一种轻量级的数据交换格式,可读性高,易于编写和解析。JSON可以表示数字、字符串、布尔值、数组、对象和null,是前端开发中常用的数…

    Java 2023年5月26日
    00
  • 页面向下滚动ajax获取数据的实现方法(兼容手机)

    实现页面向下滚动 AJAX 获取数据的方法,常用于网站无限滚动加载更多内容的功能实现。下面是实现此功能的完整攻略: 技术选型 实现页面向下滚动 AJAX 获取数据,需要使用前端技术和后端技术协同完成。前端技术主要使用 JavaScript 和 jQuery,后端技术可以选择 PHP、Java、Python等。 实现步骤 确定页面上需要进行下拉刷新的区域,一般…

    Java 2023年6月16日
    00
  • 基于Java实现二维码的生成和解析

    基于Java实现二维码的生成和解析 一、背景介绍 二维码是一种矩阵式的条码,是快速响应码(QR Code)的简称,由日本的QR Code发明并推广至全球。近年来,随着智能手机的广泛普及,二维码已经成为了一种快速传递信息的便捷方式,在生活中广泛使用。在Java中,可以使用第三方库生成和解析二维码,其中Zxing是一个常用的库。 二、生成二维码 1. 引入依赖 …

    Java 2023年5月20日
    00
  • js动态创建标签示例代码

    动态创建标签是Javascript中常用的技术之一,可以在不改变HTML结构的情况下来改变页面内容,增强用户交互性。以下是JS动态创建标签示例代码的完整攻略: 创建元素 通过 document.createElement(tagName) 方法创建一个HTML元素,tagName是想要创建的元素的标签名,如div、p、span等。 var div = doc…

    Java 2023年6月15日
    00
  • Java利用数组随机抽取幸运观众如何实现

    为了实现Java利用数组随机抽取幸运观众功能,可以按照以下步骤进行: 第一步:创建数组 声明一个整型数组,数组长度为所有参与抽奖的观众人数。示例代码如下: int[] audiences = new int[100]; 第二步:填充数组 为了能够随机抽取其中的一个幸运观众,需要在数组中填充每个观众的序号。例如,如果有100位参与者,我们就需要将1-100的序…

    Java 2023年5月26日
    00
  • java实现Floyd算法

    Java实现Floyd算法 Floyd算法是解决图中最短路问题的一种经典算法,它可以求出图中任意两点之间的最短路径。下面我们将详细讲解如何使用Java实现Floyd算法。 算法思路 Floyd算法是一种动态规划算法,它通过逐步优化不同的路径来求取图中任意两点之间的最短路径。 我们可以用一个二维数组dis来存储图中任意两点之间的距离。具体地,dis[i][j]…

    Java 2023年5月18日
    00
  • Java使用POI实现导出Excel的方法详解

    首先我们来讲解一下Java使用POI实现导出Excel的方法详解。 一、POI介绍 Apache POI是Apache软件基金会的开源项目,是用于Java编程语言处理Microsoft Office格式文件的开源库。POI提供API给用户对Excel、Word和PowerPoint等文件进行读和写的功能。POI提供了对Excel 97-2003及Excel …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部