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日

相关文章

  • php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)

    首先我们来先了解一下什么是cURL。 cURL是一个计算机软件项目,它可以利用URL语法,向网络服务器发送请求并获取数据。cURL支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、TELNET、DICT、LDAP、LDAPS、IMAP、POP3 和 SMTP。cURL还支持HTTPS认证、HTTP POST方法、FTP上…

    Java 2023年6月16日
    00
  • java的Hibernate框架报错“IdentifierGenerationException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“IdentifierGenerationException”错误。这个错误通常是由于以下原因之一引起的: 主键生成策略错误:如果主键生成策略不正确,则可能会出现此错误。在这种情况下,需要检查主键生成策略并进行必要的更改。 主键冲突:如果主键冲突,则可能会出现此错误。在这种情况下,需要查看数据库中的数据并解…

    Java 2023年5月4日
    00
  • Java 数组元素倒序的三种方式(小结)

    下面是我对“Java 数组元素倒序的三种方式(小结)”这篇文章的详细讲解。 前言 文章初步介绍了Java中实现数组元素倒序的三种方式,包含了反转、迭代以及集合的实现方式。接下来,我将详细地讲解这三种方式的实现过程和示例。 反转数组 反转数组是实现数组元素倒序最基本的方法,这种方式直接利用了Java提供的Arrays工具类中的reverse()方法来实现。下面…

    Java 2023年5月26日
    00
  • 实现Servlet程序的三种方法(小结)

    当我们需要创建JavaWeb应用程序的时候,Servlet是不可或缺的一部分。下面讲解一下如何实现Servlet程序的三种方法。 方法一:继承javax.servlet.http.HttpServlet 这是最常用的方式,创建一个继承于javax.servlet.http.HttpServlet的类,然后重写其中的doGet()、doPost()等方法,然后…

    Java 2023年5月19日
    00
  • java开发BeanUtils类解决实体对象间赋值

    Java开发中,BeanUtils类是一个常用的工具类,用于解决Java实体对象间的属性赋值问题。在实际开发中,我们通常需要根据一个实体对象的属性值赋值到另一个实体对象的属性中,BeanUtils类就可以快速实现这个过程。 下面是使用BeanUtils类解决实体对象间属性赋值的完整攻略: 1. 引入依赖 在项目中引入BeanUtils类需要先在pom文件中添…

    Java 2023年5月26日
    00
  • JSP和JSTL获取服务器参数示例

    下面是关于“JSP和JSTL获取服务器参数示例”的完整攻略。 什么是JSP和JSTL? JSP(Java Server Pages)是一种动态网页技术,它使用Java编程语言和JSP标记语言来创建网页。JSTL(JSP Standard Tag Library)是一组JSP标记,它们可以让我们更轻松地在JSP页面中使用一些常见的功能,如循环、条件判断、格式化…

    Java 2023年6月15日
    00
  • Java面试题冲刺第十天–MyBatis2

    Java面试题冲刺第十天–MyBatis2 MyBatis是一个优秀的ORM(Object Relational Mapping)框架,提供了自动将对象与关系数据库进行映射的功能,使得Java Web开发更加简单、高效。本篇文章主要介绍MyBatis的进阶使用和最佳实践。 一、MyBatis的关键特性 MyBatis的核心特性包括: 自动化的SQL映射。M…

    Java 2023年5月20日
    00
  • Maven实现项目构建工具

    Maven是一种基于Java平台的项目管理和构建工具,它可以帮助开发者更加高效,简单地构建、创建和维护项目。在Maven中,你可以定义项目所需的所有依赖关系,指定构建过程中的特定步骤,配置环境变量和创建部署包等。下面是Maven实现项目构建工具的详细攻略。 安装Maven 首先,你需要安装Maven,可以从官方网站 https://maven.apache.…

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