美文网首页
底部导航思路

底部导航思路

作者: 前行的乌龟 | 来源:发表于2018-12-25 00:55 被阅读282次

底部导航是每个 app 必备的,有的 app 底部导航做的很精美,很有诱人,于是我去特意看看底部导航都有那些玩法

目前大家做 底部导航 一般都是如下这几种方法:

  • 传统做法
  1. 对 TextView 做状态切换
  2. RadioGroup 单选按钮组
  3. FragmentTabHost
  • Material Design 时代开始
  1. 官方的 BottomNavigatioinBar
  2. 最新的 BottomNavigatioinView
  3. N 多基于 BottomNavigatioinBar 扩展的绚丽的库

其实用的话都可以,但是个人觉得还是 NavigationBar 更多强大些

本文涉及内容:

  • 开源库: BottomNavigation
    常规布局的底部导航实现
  • 开源库: EasyNavigation
    中间 item 特殊需求的底部导航实现
  • 使用 clipChildren 自己画 item 超出 底部导航 view

著名的开源库: BottomNavigation

github: BottomNavigation

用过这个库的都说好,尤其是动画效果设计,衔接很优秀,没用过的朋友至少应该过来看看,说不准以后用的上

先看一下 BottomNavigation 的3种效果:

标准 加了item切换动画 加了背景切换动画

大家仔细看,这个 BottomNavigation 在 item 切换时提供了背景颜色和 item 样式切换的动画,图2和图3分别就是,2个效果也可以叠加

item 样式切换样式:

/**
* 共有5个类型
* 1. 默认带 item 动画 -> MODE_DEFAULT 
* 2. 不带 item 动画 -> MODE_FIXED 
* 3. 只有选中的 item 显示文字,其他的不显示 -> MODE_SHIFTING
* 4. 所有的 item  都不显示文字,不带动画 -> MODE_FIXED_NO_TITLE
* 5. 所有的 item  都不显示文字,带动画 -> MODE_SHIFTING_NO_TITLE 
*/
 bottomNavigationBar.setMode()

背景颜色切换样式:

/**
* 共有3个类型
* 1. 默认带 背景颜色 动画 -> BACKGROUND_STYLE_DEFAULT 
* 2. 不带 背景颜色 动画 -> BACKGROUND_STYLE_STATIC 
* 3. 带 背景颜色 动画 -> BACKGROUND_STYLE_RIPPLE 
*/
bottomNavigationBar.setBackgroundStyle(bgSpinner.selectedItemPosition)

样式设置基本上就是这2个了,下面我们来看看怎么用

1. 添加依赖
compile 'com.ashokvarma.android:bottom-navigation-bar:2.1.0'
2. 添加 item
                bottomNavigationBar
                        .addItem(BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home").setActiveColorResource(R.color.orange).setBadgeItem(numberBadgeItem))
                        .addItem(BottomNavigationItem(R.drawable.ic_book_white_24dp, "Books").setActiveColorResource(R.color.teal))
                        .addItem(BottomNavigationItem(R.drawable.ic_music_note_white_24dp, "Music").setActiveColorResource(R.color.blue).setBadgeItem(shapeBadgeItem))
                        .addItem(BottomNavigationItem(R.drawable.ic_tv_white_24dp, "Movies & TV").setActiveColorResource(R.color.brown))
                        .addItem(BottomNavigationItem(R.drawable.ic_videogame_asset_white_24dp, "Games").setActiveColorResource(R.color.grey))
                        .initialise()
                bottomNavigationBar.selectTab(lastSelectedPosition, true)

BottomNavigationItem 就是每个 item 的 view 类型了,setActiveColorResource 是设置背景切换动画时要切换到的颜色,initialise 刷新 UI

3. 添加角标

BottomNavigation 这个库很 nice 的,添加角标功能已经给我们实现好了,setBadgeItem 方法把角标对象传进去

BottomNavigation 内置2种角标:numberBadgeItem 数字 、 ShapeBadgeItem 图形

numberBadgeItem 支持设置 文字,外边框大小颜色,背景颜色,还是很贴心的


numberBadgeItem.setText() 可以直接更新数字

ShapeBadgeItem 支持设置 shape 样式,大小,位置,


numberBadgeItem 、 ShapeBadgeItem 设置 setHideOnSelect 可以在 item 被选中时决定要不是显示角标

若是有其他需求,请参考 ShapeBadgeItem 自己写一个,ShapeBadgeItem 也是继承 BadgeItem 实现的

4. 添加监听
.setTabSelectedListener(object:BottomNavigationBar.OnTabSelectedListener{
                    override fun onTabReselected(position: Int) {
                        //重复选择的item
                    }
                    override fun onTabUnselected(position: Int) {
                       //上一次选中的item
                    }
                    override fun onTabSelected(position: Int) {
                        //当前选中的item
                    }
                })

基本就是这些,大家要是还有疑问请看官方 demo

下面这篇文章是自己动手给 BottomNavigation 添加角标


著名的开源库: EasyNavigation

可以实现下面的效果:


中间的 item 可以突出来的,EasyNavigation 库也可以设置角标的,EasyNavigation 具体使用请看:


使用 clipChildren 自己画 item 超出 底部导航 view

图中是现在大多外卖app都会有的一个购物车效果。其中红框中的部分高度略高于旁边的View。那么这时就可以使用clipChildren来实现。首先在布局根节点设置android:clipChildren="false",在使用android:layout_gravity="xxx"控制超出部分。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"> <!--这里-->

    <LinearLayout
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:orientation="horizontal">

        <RelativeLayout
            android:layout_gravity="bottom" <--这里
            android:layout_marginLeft="10dp"
            android:layout_width="48dp"
            android:layout_height="60dp">

            <ImageView
                android:src="@drawable/icon_cart"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

            <TextView
                android:layout_marginTop="6dp"
                android:layout_alignParentRight="true"
                android:background="@drawable/icon_spot"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                tools:text="1"
                android:textSize="12sp"
                android:gravity="center"
                android:textColor="#ffffff"/>

        </RelativeLayout>

        <TextView
            android:layout_marginLeft="10dp"
            android:textColor="#9bd435"
            tools:text="¥5.00"
            android:textStyle="bold"
            android:textSize="18sp"
            android:gravity="center_vertical"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent" />

        <TextView
            android:layout_width="110dp"
            android:textColor="#ffffff"
            android:gravity="center"
            android:textSize="16sp"
            android:text="去购物车"
            android:background="#9bd435"
            android:layout_height="match_parent" />

    </LinearLayout>

</RelativeLayout>

相关文章

  • 底部导航思路

    底部导航是每个 app 必备的,有的 app 底部导航做的很精美,很有诱人,于是我去特意看看底部导航都有那些玩法 ...

  • 关于底部导航BottomBar的设计思路

    设计思路设计好底部导航与内容页面的布局文件.创建java Bean类BottomTabBean存储底部导航的tab...

  • Flutter跨平台移动端开发丨底部导航栏 Tab

    Flutter 底部栏实现思路 使用flutter实现底部导航栏还是比较简单的,主要用到的组件是 Scaffold...

  • BottomNavigationView的属性设置

    底部导航栏 底部导航栏的使用比较常见,目前常用的APP几乎都是使用底部导航栏将内容分类。底部导航栏的实现也比较简单...

  • Android使用底部导航2018-08-16

    Android使用底部导航 Android底部导航停留在屏幕底部,提供应用中顶级视图之间的导航。这是在具有向后兼容...

  • 有一种看似多余的导航你知道吗?

    很多网站在页面底部也有导航,这种底部导航看似有些多余。但是他们的作用不比主导航差。 底部导航的作用和做法有如下几种...

  • 为什么底部导航被人忽视

    很多网站在页面底部也有导航,这种底部导航看似有些多余。但是他们的作用不比主导航差。 底部导航的作用和做法有如下几种...

  • 移动端交互之导航

    讨论两种导航架构在应用中的区分:底部横向导航和侧边纵向导航 1、底部横向导航 特点:横向排列与界面底部,可直接方便...

  • 使用 TabLayout 制作底部导航栏

    国内大部分应用使用底部导航栏, 底部导航栏 是国内 APP 常见的导航方式, 历经: TabActivity -...

  • 安卓底部导航

    Android底部导航栏实现(一)之BottomNavigationBarAndroid底部导航栏实现(二)之Ra...

网友评论

      本文标题:底部导航思路

      本文链接:https://www.haomeiwen.com/subject/quttlqtx.html