Android Material Design BottomNavigationBar

Livox MID360与Fast-LIO2的实战部署指南:从驱动安装到点云处理 本文提供Livox MID360激光雷达与Fast-LIO2激光惯性里程计从零开始的实战部署指南。详细介绍了Ubuntu系统下的驱动安装、网络配置、点云数据验证以及Fast-LIO2算法的编译、参数配置与联合启动流程,帮助开发者快速搭建移动机器人SLAM系统,并包含关键参数调优与常见故障排查方法。 阅读详情

       BottomNavigationBar是谷歌最新推出实现底部导航栏控件,属于Material Design风格。在此之前我们要是实现底部导航栏写法各有不同,比如早些时使用TabHost来实现,还有LinearLayout + TextView、RadioGroup + RadioButton、TabLayout+ViewPager等。

       使用BottomNavigationBar实现底部导航栏效果只需三步骤。既然是控件,那么布局是要有的,java核心代码必不可少,使用之前我们还需添加依赖。先看例子效果图:

 第一步:添加依赖

 

compile 'com.ashokvarma.android:bottom-navigation-bar:1.3.0'

 

第二步:布局文件

1.主布局 activity_main

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!--内容区域-->
    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!--设置默认Fragment-->
        <include layout="@layout/home_fragment"/>

    </FrameLayout>

    <!--BottomNavigationBar-->
    <com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/bottom_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        >

    </com.ashokvarma.bottomnavigation.BottomNavigationBar>

</RelativeLayout>

2.碎片布局(碎片布局有四个,这里只贴出其中之一,其他雷同

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/img_home" />


</LinearLayout>

第三部:java核心代码

 

1.BaseFragment(懒加载

/**
 * Created by Dell on 2017/5/11.
 *实现懒加载方法
 */
public  class BaseFragment extends Fragment {

    //Fragment的View加载完毕的标记
    private boolean isViewCreated;
    //Fragment对用户可见的标记
    private boolean isUIVisible;

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        isViewCreated = true;
        lazyLoad();
    }

    /**
     *  重写Fragment父类生命周期方法,在onCreate之前调用该方法,
     * 实现Fragment数据的缓加载. 
     * @param isVisibleToUser//表示该Fragment的UI对于用户是否可见
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        //当setUserVisibleHint(boolean isVisibleToUser)回调为true时,
        //改变isVisible标记为true,并调用lazyLoad()方法
        //isVisibleToUser这个boolean值表示:该Fragment的UI 用户是否可见
        if (isVisibleToUser) {
            isUIVisible = true;
            lazyLoad();
        } else {
            isUIVisible = false;
        }

    }
    public void lazyLoad(){
        //这里进行双重标记判断,是因为setUserVisibleHint会多次回调,
        //并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,
        //才加载数据
        if (isViewCreated && isUIVisible) {
            loadData();
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false;
            isUIVisible = false;
        }
    }

    public void loadData(){

    }

}

2.HomeFragment(其他三个一样,只贴出一个

 

public class HomeFragment extends BaseFragment {

    private View homeView;
    private ImageView mImageView;

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        homeView=inflater.inflate(R.layout.home_fragment,container,false);
        initView();
        return homeView;
    }

    /**
     * 初始化布局
     */
    private void initView() {
        mImageView= (ImageView) homeView.findViewById(R.id.imageView);
    }

    /**
     * 加载数据方法
     */
    @Override
    public void loadData() {
        super.loadData();
    }
    
}

 

3.MainActivity

 

public class MainActivity extends AppCompatActivity implements
        BottomNavigationBar.OnTabSelectedListener{

    //定义BottomNavigationBar对象  
    private BottomNavigationBar mBottomNavigationBar;
    private HomeFragment mHomeFragment;
    private ShoppingCartFragment mShoppingCartFragment;
    private MessageFragment mMessageFragment;
    private MyFragment mMyFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        //Background 模式
        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        //Background Style
        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        //设置未点击颜色
        mBottomNavigationBar.setInActiveColor(R.color.hei);
        //图标和文字的颜色一致(设置点击颜色)
        mBottomNavigationBar.setActiveColor(R.color.green);
        //设置BottomNavigationBar的背景色
        mBottomNavigationBar.setBarBackgroundColor(R.color.orange);

        List<BottomNavigationItem> items = new ArrayList<>();
        items.add(getItem(R.drawable.ic_home,R.string.app_home));
        items.add(getItem(R.drawable.ic_cart, R.string.app_shop_car));
        items.add(getItem(R.drawable.ic_mms, R.string.app_message));
        items.add(getItem(R.drawable.ic_mine, R.string.app_mine));

        for (BottomNavigationItem item : items) {
            mBottomNavigationBar.addItem(item);
        }
        mBottomNavigationBar.setFirstSelectedPosition(0);
        mBottomNavigationBar.initialise();

        mBottomNavigationBar.setTabSelectedListener(this);

    }

    private BottomNavigationItem getItem(int icon, int string) {
        return new BottomNavigationItem(icon, string);
    }

    /**
     * BottomNavigationBar被选中
     * @param position
     */
    @Override
    public void onTabSelected(int position) {
        FragmentTransaction beginTransaction = getSupportFragmentManager().beginTransaction();

        // 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况
        hideFragments(beginTransaction);
        switch (position) {
            case 0:
                if (mHomeFragment==null){
                    mHomeFragment=new HomeFragment();
                    beginTransaction.add(R.id.frame_layout,mHomeFragment);
                }
                // 如果Fragment不为空,则直接将它显示出来
                if (mHomeFragment!=null){
                    beginTransaction.show(mHomeFragment);
                }
                beginTransaction.addToBackStack(null);
                break;
            case 1:
                //显示、加载Fragment
                if (mShoppingCartFragment==null){
                    // 如果fragment为空,则创建一个并添加到界面上  
                    mShoppingCartFragment=new ShoppingCartFragment();
                    beginTransaction.add(R.id.frame_layout,mShoppingCartFragment);
                }else {
                    // 如果Fragment不为空,则直接将它显示出来  
                    beginTransaction.show(mShoppingCartFragment);
                }
                beginTransaction.addToBackStack(null);
                break;
            case 2:
                //显示、加载Fragment
                if (mMessageFragment==null){
                    // 如果fragment为空,则创建一个并添加到界面上  
                    mMessageFragment=new MessageFragment();
                    beginTransaction.add(R.id.frame_layout,mMessageFragment);
                }else {
                    // 如果Fragment不为空,则直接将它显示出来  
                    beginTransaction.show(mMessageFragment);
                }
                beginTransaction.addToBackStack(null);
                break;
            case 3:
                //显示、加载Fragment
                if (mMyFragment==null){
                    // 如果fragment为空,则创建一个并添加到界面上  
                    mMyFragment=new MyFragment();
                    beginTransaction.add(R.id.frame_layout,mMyFragment);
                }else {
                    // 如果Fragment不为空,则直接将它显示出来  
                    beginTransaction.show(mMyFragment);
                }
                beginTransaction.addToBackStack(null);
                break;
        }
        beginTransaction.commit();
    }

    /**
     * BottomNavigationBar未被选中
     * @param position
     */
    @Override
    public void onTabUnselected(int position) {

    }

    /**
     *  BottomNavigationBar重新选中
     * @param position
     */
    @Override
    public void onTabReselected(int position) {

    }

    /**
     * 隐藏 Fragment 
     * @param beginTransaction
     */
    private void hideFragments(FragmentTransaction beginTransaction) {
        if (mHomeFragment!=null){
            beginTransaction.hide(mHomeFragment);
        }
        if (mShoppingCartFragment!=null){
            beginTransaction.hide(mShoppingCartFragment);
        }
        if (mMessageFragment!=null){
            beginTransaction.hide(mMessageFragment);
        }
        if (mMyFragment!=null){
            beginTransaction.hide(mMyFragment);
        }
    }

}

 

 

其中 initView()方法体还可以这么写。

mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
//Background 模式
mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
//Background Style
mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        
mBottomNavigationBar
      .addItem(new BottomNavigationItem(R.drawable.ic_home, "首页").
                        setInActiveColor(R.color.hei).setActiveColor(R.color.pink))
      .addItem(new BottomNavigationItem(R.drawable.ic_cart, "购物车").
                        setInActiveColor(R.color.hei).setActiveColor(R.color.pink))
      .addItem(new BottomNavigationItem(R.drawable.ic_mms, "消息").
                        setInActiveColor(R.color.hei).setActiveColor(R.color.pink))
      .addItem(new BottomNavigationItem(getItem(R.drawable.ic_mine, "我的").
                        setInActiveColor(R.color.hei).setActiveColor(R.color.pink))
      .setFirstSelectedPosition(0)//设置默认选择item
      .setBarBackgroundColor(R.color.orange)//设置BottomNavigationBar的背景色
      .initialise();//所有的设置需在调用该方法前完

 或者这样写:

 

mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
//Background 模式
mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
//Background Style
mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);

mBottomNavigationBar
        .addItem(new BottomNavigationItem(R.drawable.ic_home, "首页")
        .addItem(new BottomNavigationItem(R.drawable.ic_cart, "购物车")
        .addItem(new BottomNavigationItem(R.drawable.ic_mms, "消息")
        .addItem(new BottomNavigationItem(getItem(R.drawable.ic_mine, "我的")
        .setBarBackgroundColor(R.color.orange)//设置BottomNavigationBar的背景色
        .setFirstSelectedPosition(0)//设置默认选择item
        .setActiveColor(R.color.pink)//图标和文字的颜色一致(设置点击颜色)
        .setInActiveColor(R.color.hei)//设置未点击颜色
        .initialise();//所有的设置需在调用该方法前完

                                                                                                                                                     

 

总结:

一:BottomNavigationBar Mode

Mode有三种:

 

  • MODE_DEFAULT
         如果Item的个数<=3就会使用MODE_FIXED模式,否则使用MODE_SHIFTING模式
  • MODE_FIXED
         填充模式,未选中的Item会显示文字,没有换挡动画。
  • MODE_SHIFTING
         换挡模式,未选中的Item不会显示文字,选中的会显示文字。在切换的时候会有一个像换挡的动画


二:Background Style
Style
也有三种:

 

 

  • BACKGROUND_STYLE_DEFAULT
    如果设置的Mode为MODE_FIXED,将使用BACKGROUND_STYLE_STATIC 。如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。

  • BACKGROUND_STYLE_STATIC
    点击的时候没有水波纹效果

  • BACKGROUND_STYLE_RIPPLE
    点击的时候有水波纹效果

     

三:BottomNavigationBar Item的选中和未选中颜色设置
//设置未点击颜色
mBottomNavigationBar.setInActiveColor(R.color.xxx);
//图标和文字的颜色一致(设置点击颜色)
mBottomNavigationBar.setActiveColor(R.color.xxx);

 

 

四:设置BottomNavigationBar的背景色

mBottomNavigationBar.setBarBackgroundColor(R.color.xxx);

 

五:添加标记小圆点

 

BadgeItem badgeItem = new BadgeItem();
badgeItem.setHideOnSelect(false)
            .setText("10")
            .setBackgroundColorResource(R.color.orange)
            .setBorderWidth(0);

//导航栏中的tab添加小圆点
mBottomNavigationBar.addItem(new BottomNavigationItem(
R.drawable.ic_mms, "消息") .setActiveColorResource(R.color.green) .setBadgeItem(badgeItem)); 

 

。

。

。

最后注意:

      所有的设置都要在.initialise();之前完成。

 

官网例子地址:

https://github.com/Ashok-Varma/BottomNavigation

 

从圆形到椭圆:CenterNet中高斯热图半径的自适应优化策略 本文深入探讨了CenterNet目标检测模型中高斯热图生成策略的优化,针对传统圆形高斯核在处理长宽比差异大目标时的局限性,提出了自适应椭圆高斯核的解决方案。通过数学推导和代码实战,详细阐述了如何根据目标边界框尺寸动态计算椭圆长短轴半径,生成更贴合目标几何形状的热图监督信号,从而有效提升模型,尤其是对无人机、车辆等不规则目标的定位精度。 阅读详情

相关推荐

STM32F103C8T6 Bootloader开发实战:串口IAP固件升级与Keil工程配置详解

本文详细介绍了STM32F103C8T6 Bootloader开发实战,重点讲解串口IAP固件升级的实现方法与Keil uVision5工程配置。通过Flash分区管理、USART1通信协议设计及应用程序跳转机制等核心技术,帮助开发者掌握嵌入式系统固件升级方案,提升设备维护效率。

weixin_29165725的博客 436

Android Material Design控件学习NavigationView和Toolbar使用

Google I/O 2015 给大家带来了Android Design Support Library,我们也可以到Android Design Support Library进行了解,下面介绍Toolbar的使用和NavigationView导航抽屉,而NavigationView的典型用途就是配合之前v4包的DrawerLayout, 首先导入依赖包compile 'com.android

fictionss的博客 534

Ubuntu声卡检测与故障排查:从基础命令到驱动修复

本文详细介绍了在Ubuntu系统中进行声卡检测与故障排查的完整流程。从使用lspci、aplay等基础命令识别硬件,到排查驱动冲突、修复权限问题,再到调整PulseAudio高级配置,提供了一套系统性的解决方案。文章结合实战案例,帮助用户快速诊断并解决Ubuntu系统常见的“无声”问题,恢复音频功能。

g2h3i4j5的博客 228

Flutter Material Components Widgets之BottomNavigationBar

BottomNavigationBar 底部导航条,可以很容易地在tap之间切换和浏览顶级视图。 BottomNavigationBar 显示在应用程序底部的Widget,用于在少量视图中进行选择,通常在3到5之间。 构造函数 BottomNavigationBar({ Key key, @required this.items, this.onTap, thi...

lmjssjj的专栏 268

Python头歌实验题目(2024版)

武汉理工大学头歌平台实验题目

2401_84152595的博客 2万+

【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)

游戏实机录屏 【魔方超新星】30天独立开发PCG Minigame《盖亚计划》作品展示,尚有不足,大佬轻喷 目录 游戏实机录屏 一、简介 二、设计思路 2.1 Disco Ball 2.2 Fibonacci Sphere 2.3 Goldberg Polyhedron 2.3.1 细分+对偶(最终方案) 2.3.2 对偶+截角(更优) 三、参考文献 一、简介 在制作Minigame初期,游戏风格想模仿《文明6》与《Polygonal Planet Proje...

ColorGalaxy 5928

四、Material组件之MaterialApp、Scaffold、BottomNavigationBar、Drawer、AppBar、TabBar

一、MaterialApp class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), //注册路由 routes: <

Sim的博客 486

PS/Ai/PR/AE等adobe出现正版弹窗提示:Your non-genuine Adobe app will be disabled soon解决办法

就是用专门的清理工具下载,清理工具在文章下方。然后新建三个空的记事本文件,重命名为 Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe。在该文件目录中,分别找到 Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe,然后在防火墙入站规则里,阻止Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe。

Q82556499的博客 1万+

Android学习Material design中的底部导航栏BottomNavigationBar

今天写项目的之于看了一下material Design关于底座图标BottomNacigationBar的介绍,网上的资料已经很详细了,在此留下记录便于以后查找.   首先要添加项目依赖   compile 'com.ashokvarma.android:bottom-navigation-bar:1.3.1' 我们也可以点击file选中Project Structure ,然后选择De

hui9520的博客 2592

UE5新手必看:如何在UMG控件中嵌入浏览器实现Web页面展示(附完整步骤)

本文为UE5新手提供了在UMG控件中无缝集成Web浏览器的完整实战指南。详细介绍了从启用WebBrowser插件、创建并配置WebBrowser控件蓝图,到编写动态加载与交互逻辑,以及在游戏关卡中实例化UI的全过程。文章还分享了性能优化技巧与常见问题排查方法,帮助开发者高效实现游戏UI内的Web页面展示与交互。

weixin_29243063的博客 710

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

Android--BottomNavigationBar实现底部导航栏

1.BottomNavigationBar的下载地址 https://github.com/Ashok-Varma/BottomNavigation 2.使用的方法 2.1在Gradle中添加 compile ‘com.ashokvarma.android:bottom-navigation-bar:0.9.5’ 2.2布局实现 <com.ashokvarma.bottomn...

超宇的博客 1万+

C#上位机性能优化全攻略:彻底解决界面卡顿+多线程死锁+PLC数据延迟,产线实测稳定运行2年

一开始我们用的是网上找的零散优化代码,根本满足不了要求,后来花了2个月的时间,把之前27条产线的代码整理、重构、优化,做了一套这套方案上线后,连续稳定运行2年零3个月:界面响应时间稳定在50ms以内,多线程死锁率持续为0,PLC数据延迟稳定在150ms以内,系统可用率≥99.99%,帮客户一年省下了超过480万的停线损失、罚款损失和人工成本,客户第二年就把剩下的22条产线也全部交给我们做了,还介绍了3家同行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 293

Material Design——BottomNavigationBar

路是一步一步走出来的,全家桶是一点点吃完的Android Material Design的底部导航控制,我了解这个控件是因为这几天突然对知乎的底部导航栏感到好奇(知乎的客户端太好用),就通过度娘了解到了这个控件。所以今天就试着去了解它,也希望自己以后的应用可以符合MD设计风格,更规范,更具美感。果果说: Bottom navigation bars make it easy to explore

Feathers的个人笔记 3103

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Google官方BottomNavigationBar底部导航的使用

1.先上图: 此底部Tab完全可以满足日常的开发 2.使用:         很简单,使用Gradle构建:compile ‘com.ashokvarma.android:bottom-navigation-bar:0.9.5' 3.在布局文件中使用     com.ashokvarma.bottomnavigation.BottomNavigationBar

站在金子塔顶 3546

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android BottomNavigationBar底部导航控制器的使用

转载请标明出处:http://blog.youkuaiyun.com/u010046908/article/details/50962081本文出自:【李东的博客】 最近Google在自己推出的Material design中增加了Bottom Navigation导航控制。Android一直没有官方的导...

chenzhiyi4480的博客 139

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android学习之BottomNavigationBar实现Android特色底部导航栏

Android底部导航栏的实现方式特别多,例如TabHost,TabLayout,或者TextView等,都可以实现底部导航栏的效果,但是却没有Google官方统一的导航栏样式,今天讲的就是Google最近添加到Material design中的底部导航栏BottomNavigationBar,也可以说是现今Android底部导航栏的一个标准与统一吧。 效果: 实现效果:

pjh的博客 4304

底部导航控件——BottomNavigationBar简单使用

Google在自己推出的Material design中增加了Bottom Navigation导航控制。Android一直没有官方的导航控制器,自己实现确实是五花八门,有了这个规定之后,以后我们的APP就会有一致的风格

qq_38250682的博客 2118

BottomNavigationBar 开源项目教程

BottomNavigationBar 开源项目教程 项目介绍 BottomNavigationBar 是一个用于 Android 应用的底部导航栏开源项目。它提供了一种简洁且易于使用的方式来实现底部导航栏功能,使得用户可以轻松地在应用的不同模块之间切换。该项目遵循 Material Design 设计原则,确保了良好的用户体验和视觉效果。 项目快速启动 添加依赖 首先,在您的 build.gra...

gitblog_00046的博客 689

终极Android底部导航栏:5大增强库快速提升用户体验

Android底部导航栏是移动应用中连接用户与核心功能的关键桥梁,一个设计精美、交互流畅的底部导航能显著提升用户体验和应用留存率。本文将为你介绍5款精选的Android底部导航增强库,帮助开发者快速实现媲美主流应用的导航交互效果。 ## 1. BottomNavigation: Material Design规范的完美实现 [布局Layout/README.md](https://link.g

gitblog_01193的博客 326

Android VR Player(全景视频播放器) [3]:底部导航的实现

Android VR Player(全景视频播放器) [3]:底部导航的实现底部导航介绍本篇主要分享Material design中Bottom Navigation的实现过程,先看效果图: (图片来源:https://github.com/Ashok-Varma/BottomNavigation) Bottom Navigation导航方式在今天很多APP上都可以看到,可以说是Androi

山城过雨 1410

Flutter 跨平台开发:iOS+Android 统一界面实战

【代码】Flutter 跨平台开发:iOS+Android 统一界面实战。

2509_94083873的博客 1112

Android 底部导航栏 BottomNavigationBar

大部分app,都采用导航栏的方式,无论是顶部导航栏还是底部导航栏,这是一个app的根骨,本文是采用Google最近添加到Material design中的底部导航栏BottomNavigationBar控件,效果好,UI美观,而且有很多效果,下面就来简单介绍一下。 先上图:              代码添加: 1、引入Navigation的包: compile 'com

七月雨的专栏 7983

安卓BottomNavigationBar酷炫导航栏

今年三月份Google在自己推出的Material design库中增加了BottomNavigationBar导航栏控制器。以前想要实现这个效果可谓是方法众多,五花八门像TabHost,RadioButton,textView等等,现在推出了这个就可以完美取代其它各式各样的导航栏。借鉴了这两篇博客,写了这个带Fragment状态保存的BottomNavigationBar。转载请注明出处:http

上辈子作恶多端,这辈子写前端。 6114

第5章MaterialDesign风格组件-BottomNavigationBar底部导航条组件

防采集标记:亢少军老师的课程和资料 import 'package:flutter/material.dart'; void main() =&gt; runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return Mat...

亢少军的博客 629

Material Design之底部导航栏

1.首先加入依赖包: compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.2' 2.新建activity_main.xml主布局,用于放置整个Fragment xml version="1.0" encoding="utf-8"?> FrameLayout xmlns:android="http://sche

u010273007的博客 774
上一篇: NoClassDefFoundError: com/jcraft/jsch/JSchException
下一篇: 关于那些解决安卓错误的方法
小红妹
博客等级 码龄10年 151粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值