精华内容
下载资源
问答
  • 底部Tab导航底部Tab导航底部Tab导航
  • Fragment+FragmentTabHost实现仿新浪微博底部菜单栏效果(源码)
  • 微信底部菜单,移动端底部导航菜单,超级牛叉底部固定菜单,样式非常绚丽,H5移动端底部固定菜单栏目,4个打包,需要的下载交流,
  • android底部菜单栏demo

    千次下载 热门讨论 2012-07-13 19:49:11
    android底部菜单栏demo
  • 超级底部菜单

    2018-09-09 12:17:56
    安卓底部菜单多种样式,代码简单明了,一目了然安卓底部菜单多种样式,代码简单明了,一目了然安卓底部菜单多种样式,代码简单明了,一目了然安卓底部菜单多种样式,代码简单明了,一目了然安卓底部菜单多种样式,...
  • Android 实现QQ聊天底部+号显示底部菜单,代码简单,通俗易懂,适合学习,也可以拿去做项目
  • 自定义实现底部导航栏(底部Tab)和Android 底部导航栏中间凸起
  • Android底部导航条、底部tab中间凸起效果,中间凸出按钮,可用于签到、发布等的凸出效果
  • Flutter底部导航栏BottomNavigationBar

    万次阅读 多人点赞 2019-03-04 16:23:29
    Flutter 底部导航栏(BottomNavigationBar) 在移动开发中,底部导航栏是非常常见的,在之前我也写过一篇关于在Android中如何使用底部导航栏的博客,感兴趣的可以看一下。 Android底部导航栏BottomNavigationBar...

    Flutter 底部导航栏(BottomNavigationBar)

    在移动开发中,底部导航栏是非常常见的,在之前我也写过一篇关于在Android中如何使用底部导航栏的博客,感兴趣的可以看一下。
    Android底部导航栏BottomNavigationBar使用方法

    下面,我们来看一下在Flutter 中 底部导航栏是如何使用的。

    首先看一下效果图:

    shifting模式
    在这里插入图片描述

    fixed模式
    在这里插入图片描述

    BottomNavigationBar

    首先,bottomNavigationBar 是属于 Scaffold 中的一个位于底部的控件。通常和 BottomNavigationBarItem 配合使用

    BottomNavigationBar构造方法

      BottomNavigationBar({
        Key key,
        @required this.items,  
        this.onTap,
        this.currentIndex = 0,
        BottomNavigationBarType type,
        this.fixedColor,
        this.iconSize = 24.0,
      })
    
    属性值类型说明
    itemsBottomNavigationBarItem类型的List底部导航栏的显示项
    onTapValueChanged < int >点击导航栏子项时的回调
    currentIndexint当前显示项的下标
    typeBottomNavigationBarType底部导航栏的类型,有fixed和shifting两个类型,显示效果不一样
    fixedColorColor底部导航栏type为fixed时导航栏的颜色,如果为空的话默认使用ThemeData.primaryColor
    iconSizedoubleBottomNavigationBarItem icon的大小

    BottomNavigationBar中属性比较简单,下面我们来看一下BottomNavigationBarItem

    BottomNavigationBarItem

    底部导航栏要显示的Item,有图标和标题组成

    构造方法:

      const BottomNavigationBarItem({
        @required this.icon,
        this.title,
        Widget activeIcon,
        this.backgroundColor,
      })
    
    属性值类型说明
    iconWidget要显示的图标控件,一般都是Iocn
    titleWidget要显示的标题控件,一般都是Text
    activeIconWidget选中时要显示的icon,一般也是Icon
    backgroundColorColorBottomNavigationBarType为shifting时的背景颜色

    简单使用

    一般来说,点击底部导航栏都是要进行页面切换或者更新数据的,我们需要动态的改变一些状态,所以,我们要继承自StatefulWidget

    class IndexPage extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return _IndexState();
      }
    }
    

    首先,我们需要准备导航栏要显示的项:

      final List<BottomNavigationBarItem> bottomNavItems = [
        BottomNavigationBarItem(
          backgroundColor: Colors.blue,
          icon: Icon(Icons.home),
          title: Text("首页"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.green,
          icon: Icon(Icons.message),
          title: Text("消息"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.amber,
          icon: Icon(Icons.shopping_cart),
          title: Text("购物车"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.red,
          icon: Icon(Icons.person),
          title: Text("个人中心"),
        ),
      ];
    
    

    以及点击导航项是要显示的页面:

     final pages = [HomePage(), MsgPage(), CartPage(), PersonPage()];
    

    由于是演示,页面很简单,都是只放一个Text

    import 'package:flutter/material.dart';
    
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Center(
          child: Text("首页"),
        );
      }
    }
    
    

    这些都准备完毕后,我们就可以开始使用底部导航栏了,首先我们要在Scaffold中使用bottomNavigationBar,然后指定items,currentIndex,type(默认是fixed)、onTap等属性

    Scaffold(
          appBar: AppBar(
            title: Text("底部导航栏"),
          ),
          bottomNavigationBar: BottomNavigationBar(
            items: bottomNavItems,
            currentIndex: currentIndex,
            type: BottomNavigationBarType.shifting,
            onTap: (index) {
              _changePage(index);
            },
          ),
          body: pages[currentIndex],
        );
      }
    

    这里我们主要看一下onTap,该属性接收一个方法回调,其中,index表示当前点击导航项的下标,也就是items的下标。
    知道下标后,我们只需要更改currentIndex即可。

    下面我们来看一下_changePage方法:

      /*切换页面*/
      void _changePage(int index) {
        /*如果点击的导航项不是当前项  切换 */
        if (index != currentIndex) {
          setState(() {
            currentIndex = index;
          });
        }
      }
    

    如此一来,我们就实现了点击底部导航项切换页面的效果了,非常简单。
    全部代码:

    import 'package:flutter/material.dart';
    import 'package:flutter_sample/widget/bottom_nav/cart_page.dart';
    import 'package:flutter_sample/widget/bottom_nav/home_page.dart';
    import 'package:flutter_sample/widget/bottom_nav/msg_page.dart';
    import 'package:flutter_sample/widget/bottom_nav/person_page.dart';
    
    class IndexPage extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return _IndexState();
      }
    }
    
    class _IndexState extends State<IndexPage> {
      final List<BottomNavigationBarItem> bottomNavItems = [
        BottomNavigationBarItem(
          backgroundColor: Colors.blue,
          icon: Icon(Icons.home),
          title: Text("首页"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.green,
          icon: Icon(Icons.message),
          title: Text("消息"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.amber,
          icon: Icon(Icons.shopping_cart),
          title: Text("购物车"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.red,
          icon: Icon(Icons.person),
          title: Text("个人中心"),
        ),
      ];
    
      int currentIndex;
    
      final pages = [HomePage(), MsgPage(), CartPage(), PersonPage()];
    
      @override
      void initState() {
        super.initState();
        currentIndex = 0;
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("底部导航栏"),
          ),
          bottomNavigationBar: BottomNavigationBar(
            items: bottomNavItems,
            currentIndex: currentIndex,
            type: BottomNavigationBarType.shifting,
            onTap: (index) {
              _changePage(index);
            },
          ),
          body: pages[currentIndex],
        );
      }
    
      /*切换页面*/
      void _changePage(int index) {
        /*如果点击的导航项不是当前项  切换 */
        if (index != currentIndex) {
          setState(() {
            currentIndex = index;
          });
        }
      }
    }
    
    

    效果图如下
    在这里插入图片描述

    一般情况下,我们底部导航栏不会弄得这么花哨,所以一般都是使用fixed模式,此时,导航栏的图标和标题颜色会使用fixedColor指定的颜色,如果没有指定fixedColor,则使用默认的主题色primaryColor

    代码示例:

    Scaffold(
          appBar: AppBar(
            title: Text("底部导航栏"),
          ),
          bottomNavigationBar: BottomNavigationBar(
            items: bottomNavItems,
            currentIndex: currentIndex,
            type: BottomNavigationBarType.fixed,
            onTap: (index) {
              _changePage(index);
            },
          ),
          body: pages[currentIndex],
        );
    

    入口函数:

    /*入口函数*/
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter入门示例程序',
          theme: ThemeData(
            primaryColor: Colors.blue,
          ),
          home: IndexPage(),
        );
      }
    }
    

    在这里插入图片描述

    好了,Flutter 底部导航栏就这些,还是很简单的。

    Flutter底部导航栏demo


    如果你觉得本文对你有帮助,麻烦动动手指顶一下,算是对本文的一个认可。也可以关注我的 Flutter 博客专栏,我会不定期的更新,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

    展开全文
  • jQuery制作手机底部菜单 jQuery制作手机底部菜单 jQuery制作手机底部菜单
  • Android底部导航栏,三种风格和实现

    万次阅读 多人点赞 2018-07-07 12:36:53
    一、效果图展示 如果动图没有动的...二、BottomNavigationView 这是 Google 给我们提供的一个专门用于底部导航的 View,你只需要在新建 Activity 的时候选择 “Bottom Navigation Activity”,IDE 就会自动使用 Bo...

    一、效果图展示



        如果动图没有动的话,也可以看下面这个静态图


        以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发。


    二、BottomNavigationView

        这是 Google 给我们提供的一个专门用于底部导航的 View,你只需要在新建 Activity 的时候选择 “Bottom Navigation Activity”,IDE 就会自动使用 BottomNavigationView 帮你生成好相应的代码了。

    1. 在 xml 中使用

        <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="0dp"
            android:layout_marginStart="0dp"
            android:background="?android:attr/windowBackground"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/navigation" />

        这里面唯一要注意的就是 app:menu 属性了,它指定了你的导航栏显示的页面菜单是怎样的。

    2. menu 的布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item
            android:id="@+id/navigation_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/title_home" />
    
        <item
            android:id="@+id/navigation_dashboard"
            android:icon="@drawable/ic_dashboard_black_24dp"
            android:title="@string/title_dashboard" />
    
        <item
            android:id="@+id/navigation_notifications"
            android:icon="@drawable/ic_notifications_black_24dp"
            android:title="@string/title_notifications" />
    
    </menu>

    3. 在 Activity 中调用

        private TextView mTextMessage;
    
        private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
                = new BottomNavigationView.OnNavigationItemSelectedListener() {
    
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_home:
                        mTextMessage.setText(R.string.title_home);
                        return true;
                    case R.id.navigation_dashboard:
                        mTextMessage.setText(R.string.title_dashboard);
                        return true;
                    case R.id.navigation_notifications:
                        mTextMessage.setText(R.string.title_notifications);
                        return true;
                }
                return false;
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_style1);
    
            mTextMessage = findViewById(R.id.message);
            BottomNavigationView navigation = findViewById(R.id.navigation);
            navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        }

        这里的演示 code 都是 IDE 自动生成的,由于 BottomNavigationView 目前我还没有在项目中实际使用过,这里不做过多分析,使用起来不难,以上代码已经足以满足我们的基本使用要求了。


    三、RadioGroup + ViewPager

        这是一种比较常见了的,下面 4 个 tab 的导航按钮,可以切换不同的页面,这里页面使用了 ViewPager + Fragment 的组合,实现了滑动的页面效果,也可以不使用 ViewPager,这个根据产品的定义来使用即可。

    1. 布局文件

    <?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"
        tools:context=".style2.Style2Activity">
    
        <android.support.v4.view.ViewPager
            android:id="@+id/fragment_vp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/tabs_rg" />
    
        <RadioGroup
            android:id="@+id/tabs_rg"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_alignParentBottom="true"
            android:background="#dcdcdc"
            android:orientation="horizontal">
    
            <RadioButton
                android:id="@+id/today_tab"
                style="@style/Custom.TabRadioButton"
                android:checked="true"
                android:drawableTop="@drawable/tab_sign_selector"
                android:text="今日" />
    
            <RadioButton
                android:id="@+id/record_tab"
                style="@style/Custom.TabRadioButton"
                android:drawableTop="@drawable/tab_record_selector"
                android:text="记录" />
    
            <RadioButton
                android:id="@+id/contact_tab"
                style="@style/Custom.TabRadioButton"
                android:drawableTop="@drawable/tab_contact_selector"
                android:text="通讯录" />
    
            <RadioButton
                android:id="@+id/settings_tab"
                style="@style/Custom.TabRadioButton"
                android:drawableTop="@drawable/tab_setting_selector"
                android:text="设置" />
        </RadioGroup>
    </RelativeLayout>

    2. Activity 类

    public class Style2Activity extends AppCompatActivity {
    
        private ViewPager mViewPager;
        private RadioGroup mTabRadioGroup;
    
        private List<Fragment> mFragments;
        private FragmentPagerAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_style2);
            initView();
        }
    
        private void initView() {
            // find view
            mViewPager = findViewById(R.id.fragment_vp);
            mTabRadioGroup = findViewById(R.id.tabs_rg);
            // init fragment
            mFragments = new ArrayList<>(4);
            mFragments.add(BlankFragment.newInstance("今日"));
            mFragments.add(BlankFragment.newInstance("记录"));
            mFragments.add(BlankFragment.newInstance("通讯录"));
            mFragments.add(BlankFragment.newInstance("设置"));
            // init view pager
            mAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), mFragments);
            mViewPager.setAdapter(mAdapter);
            // register listener
            mViewPager.addOnPageChangeListener(mPageChangeListener);
            mTabRadioGroup.setOnCheckedChangeListener(mOnCheckedChangeListener);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mViewPager.removeOnPageChangeListener(mPageChangeListener);
        }
    
        private ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
            }
    
            @Override
            public void onPageSelected(int position) {
                RadioButton radioButton = (RadioButton) mTabRadioGroup.getChildAt(position);
                radioButton.setChecked(true);
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        };
    
        private RadioGroup.OnCheckedChangeListener mOnCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                for (int i = 0; i < group.getChildCount(); i++) {
                    if (group.getChildAt(i).getId() == checkedId) {
                        mViewPager.setCurrentItem(i);
                        return;
                    }
                }
            }
        };
    
        private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    
            private List<Fragment> mList;
    
            public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
                super(fm);
                this.mList = list;
            }
    
            @Override
            public Fragment getItem(int position) {
                return this.mList == null ? null : this.mList.get(position);
            }
    
            @Override
            public int getCount() {
                return this.mList == null ? 0 : this.mList.size();
            }
        }
    
    }

        这里唯一注意点的就是两个监听事件,要实现底部导航按钮和页面的联动。


    四、带页面跳转功能的底部导航

        很多 APP 的底部导航栏中间有一个很大的按钮,点击后通常是打开一个新的页面,这里我们要实现的就是这种底部导航。
    依旧是使用 RadioGroup 来做,只不过中间一个 tab 我们先用一个空的 View 来占位,然后在这个 View 的位置放置一个较大的按钮来覆盖住。

    1. 布局文件

    <?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"
        tools:context=".style3.Style3Activity">
    
        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/tabs_rg" />
    
        <RadioGroup
            android:id="@+id/tabs_rg"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_alignParentBottom="true"
            android:background="#dcdcdc"
            android:orientation="horizontal">
    
            <RadioButton
                android:id="@+id/today_tab"
                style="@style/Custom.TabRadioButton"
                android:checked="true"
                android:drawableTop="@drawable/tab_sign_selector"
                android:text="今日" />
    
            <RadioButton
                android:id="@+id/record_tab"
                style="@style/Custom.TabRadioButton"
                android:drawableTop="@drawable/tab_record_selector"
                android:text="记录" />
    
            <View style="@style/Custom.TabRadioButton" />
    
            <RadioButton
                android:id="@+id/contact_tab"
                style="@style/Custom.TabRadioButton"
                android:drawableTop="@drawable/tab_contact_selector"
                android:text="通讯录" />
    
            <RadioButton
                android:id="@+id/settings_tab"
                style="@style/Custom.TabRadioButton"
                android:drawableTop="@drawable/tab_setting_selector"
                android:text="设置" />
        </RadioGroup>
    
        <ImageView
            android:id="@+id/sign_iv"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@android:color/transparent"
            android:src="@mipmap/sign" />
    </RelativeLayout>

    2. Activity 类

    public class Style3Activity extends AppCompatActivity {
    
        private RadioGroup mTabRadioGroup;
        private SparseArray<Fragment> mFragmentSparseArray;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_style3);
            initView();
        }
    
        private void initView() {
            mTabRadioGroup = findViewById(R.id.tabs_rg);
            mFragmentSparseArray = new SparseArray<>();
            mFragmentSparseArray.append(R.id.today_tab, BlankFragment.newInstance("今日"));
            mFragmentSparseArray.append(R.id.record_tab, BlankFragment.newInstance("记录"));
            mFragmentSparseArray.append(R.id.contact_tab, BlankFragment.newInstance("通讯录"));
            mFragmentSparseArray.append(R.id.settings_tab, BlankFragment.newInstance("设置"));
            mTabRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    // 具体的fragment切换逻辑可以根据应用调整,例如使用show()/hide()
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            mFragmentSparseArray.get(checkedId)).commit();
                }
            });
            // 默认显示第一个
            getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,
                    mFragmentSparseArray.get(R.id.today_tab)).commit();
            findViewById(R.id.sign_iv).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(Style3Activity.this, SignActivity.class));
                }
            });
        }
    
    }

    注意:

        如果这里你也想使用 ViewPager 来展示 Fragment 的话,一定要注意这里的 RadioGroup 中间有一个占位的 View,即两者的监听事件里,实现联动时要考虑多个这个 View 的存在。


    代码地址: https://gitee.com/afei_/BottomTabbar

    展开全文
  • H5移动端div固定到底部实现底部导航条的几种方式 需求: 需要把导航固定在底部?只能滑动内容,导航菜单固定不动的。效果如下: 这篇文章主要讲解三种实现方案,包括:fixed,absolute,以及css3的flex布局。 ...

    H5移动端div固定到底部实现底部导航条的几种方式


    需求:

    需要把导航固定在底部?只能滑动内容,导航菜单固定不动的。效果如下:

    这篇文章主要讲解三种实现方案,包括:fixed,absolute,以及css3的flex布局。

    html结构如下:

    <div class="box">
        <div class="roll">滚动区域</div>
        <footer>底部固定菜单</footer>
    </div>
    <!---公用样式--->
    <style>
    html,body{
        margin:0;padding:0;height:100%;width:100%;
    }
    footer{
        background:#F2F3F6;max-width: 750px;width: 100%;height: 1rem;
    }
    </style>

    方法一:使用fixed

    .box{
            .roll{
                padding-bottom:1rem;
             }
        footer{
            position:fixed;bottom:0;z-index:999;
        }
    }

     

     

    方法二:使用absolute  

    .box{
        position: relative;height: 100%;
        .roll{
            position: absolute;bottom:1rem;top: 0;overflow-y: scroll;-webkit-overflow-scrolling: touch;height: auto;
        }
        footer{
            position: absolute;bottom:0;
        }
    }

     

     

    方法三:使用flex 

    .box{
        display:flex;display: -webkit-flex;height:100%;flex-direction:column;
        .roll{
            flex: 1; width: 100%;overflow-y: scroll;-webkit-overflow-scrolling: touch;height: auto;
        }
    }

     

    总结

    1、底部定位为fixed或absolute的时候,出现优先级别较低,导致被其他div覆盖的情况,那么这里就需要用到z-index,来让他成为最高级别,不至于被覆盖。

    2、底部定位为fixed或absolute,存在输入框的时候,会出现如下情况:

    ios:激活输入框时,底部不会弹出来(合理)。
    Android:激活输入框时,底部会跟着输入框弹出来(不合理)  

    传统解决办法:通常将底部设置为fixed,当激活输入框的时候,将底部定位改为relative,即可兼容ios和Android。

    3、使用方法二或者方法三,需要设置-webkit-overflow-scrolling 属性。这样才能保证滚动区域的流畅性,-webkit-overflow-scrolling控制元素在移动设备上是否使用滚动回弹效果。

    4、在部分浏览器中设置overflow-y: scroll;会出现滚动条,这时候我们需要全局定义如下样式:

    ::-webkit-scrollbar{//scroll滚动条设置
            width: 0px; height: 0px; color: rgb(136, 0, 0);">#fff; 
    }

      

    5、移动端推荐使用方法三的布局形式。

    展开全文
  • Android应用底部导航栏(选项卡)实例Demo

    千次下载 热门讨论 2012-04-18 14:17:55
    Android应用底部导航栏(选项卡)实例代码http://blog.csdn.net/cjjky/article/details/7209056
  • iOS 底部工具条

    2018-05-19 13:59:01
    模仿系统底部弹出菜单工具框,动画实现向上推出,向下隐藏底部工具条的简单实现
  • 网页分页底部样式

    2018-03-20 15:13:59
    网页分页底部样式,网页分页底部样式,网页分页底部样式,网页分页底部样式
  • 底部弹出层

    2018-04-13 17:51:27
    底部弹出层,主要是web,html点击后底部会弹出层,可以点击选择,也可以作为分享
  • js底部滑动动画tablejs底部滑动动画tablejs底部滑动动画tablejs底部滑动动画tablejs底部滑动动画tablejs底部滑动动画tablejs底部滑动动画table
  • iPhone X 对于微信小程序的tabbar来说,会被底部小黑条覆盖,需要处理,大概思路是,得到手机型号、分别判断样式。这篇文章主要介绍了微信小程序 iPhoneX底部安全区域(底部小黑条)适配问题,需要的朋友可以参考下
  • 一款相当不错的Android底部菜单,样式美化,本人一直在用。
  • 手机底部悬浮代码

    2018-08-18 17:40:00
    网页底部固定悬浮轮播广告代码,只需要调用一个JS文件即可
  • flutter底部导航栏

    千次阅读 2019-07-06 15:22:13
    一般来说,点击底部导航栏都是要进行页面我们需要动态的改变一些状态,所以,我们要继承自StatefulWidget. bottomNavigationBar 是属于 Scaffold 中的一个位于底部的控件。通常和 BottomNavigationBarItem 配合 开发...

    更多文章请查看 lutter从入门 到精通

    实现底部导航栏并点击切换页面可简述为有三种方式

    • TabBar + TabBarView
    • BottomNavigationBar + BottomNavigationBarItem
    • 自定义 BottomAppBar

    flutter BottomNavigationBar

    • 一般来说,点击底部导航栏都是要进行页面我们需要动态的改变一些状态,所以,我们要继承自StatefulWidget.
    • bottomNavigationBar 是属于 Scaffold 中的一个位于底部的控件。通常和 BottomNavigationBarItem 配合 开发底部导航栏。

    1 基本构造方法说明

    1.1 BottomNavigationBar构造方法

      BottomNavigationBar({
        Key key,
        @required this.items,  
        this.onTap,
        this.currentIndex = 0,
        BottomNavigationBarType type,
        this.fixedColor,
        this.iconSize = 24.0,
      })
    
    
    属性值类型说明
    itemsBottomNavigationBarItem类型的List底部导航栏的显示项
    onTapValueChanged < int >点击导航栏子项时的回调
    currentIndexint当前显示项的下标
    typeBottomNavigationBarType底部导航栏的类型,有fixed和shifting两个类型,显示效果不一样
    fixedColorColor底部导航栏type为fixed时导航栏的颜色,如果为空的话默认使用ThemeData.primaryColor
    iconSizedoubleBottomNavigationBarItem icon的大小

    1.2 BottomNavigationBarItem

    底部导航栏要显示的Item,有图标和标题组成

    BottomNavigationBarItem的构造方法

      const BottomNavigationBarItem({
        @required this.icon,
        this.title,
        Widget activeIcon,
        this.backgroundColor,
      })
    
    
    属性值类型说明
    iconWidget要显示的图标控件,一般都是Iocn
    titleWidget要显示的标题控件,一般都是Text
    activeIconWidget选中时要显示的icon,一般也是Icon
    backgroundColorColorBottomNavigationBarType为shifting时的背景颜色

    2 效果实现

    在这里插入图片描述

    import 'package:flutter/material.dart';
    
    /**
     * 有状态StatefulWidget
     *  继承于 StatefulWidget,通过 State 的 build 方法去构建控件
     */
    class BotomeMenumPage extends StatefulWidget {
      通过构造方法传值
      BotomeMenumPage();
    
      //主要是负责创建state
      @override
      BotomeMenumPageState createState() => BotomeMenumPageState();
    }
    
    /**
     * 在 State 中,可以动态改变数据
     * 在 setState 之后,改变的数据会触发 Widget 重新构建刷新
     */
    class BotomeMenumPageState extends State<BotomeMenumPage> {
      BotomeMenumPageState();
    
      @override
      void initState() {
        ///初始化,这个函数在生命周期中只调用一次
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        //构建页面
        return buildBottomTabScaffold();
      }
    
      //当前显示页面的
      int currentIndex = 0;
    
      //底部导航栏显示的内容
      final List<BottomNavigationBarItem> bottomNavItems = [
        BottomNavigationBarItem(
          backgroundColor: Colors.blue,
          icon: Icon(Icons.home),
          title: Text("首页"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.blue[600],
          icon: Icon(Icons.format_indent_increase),
          title: Text("发现"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.blue[800],
          icon: Icon(Icons.message),
          title: Text("动态"),
        ),
        BottomNavigationBarItem(
          backgroundColor: Colors.blue[900],
          icon: Icon(Icons.person),
          title: Text("我的"),
        ),
      ];
    
      //点击导航项是要显示的页面
      final pages = [
        ChildItemView("首页"),
        ChildItemView("发现"),
        ChildItemView("动态"),
        ChildItemView("我的")
      ];
    
      Widget buildBottomTabScaffold() {
        return Scaffold(
          bottomNavigationBar: BottomNavigationBar(
            items: bottomNavItems,
            currentIndex: currentIndex,
            //所以一般都是使用fixed模式,此时,导航栏的图标和标题颜色会使用fixedColor指定的颜色,
            // 如果没有指定fixedColor,则使用默认的主题色primaryColor
            type: BottomNavigationBarType.fixed,
            //底部菜单点击回调
            onTap: (index) {
              _changePage(index);
            },
          ),
          //对应的页面
          body: pages[currentIndex],
        );
      }
    
      /*切换页面*/
      void _changePage(int index) {
        /*如果点击的导航项不是当前项  切换 */
        if (index != currentIndex) {
          setState(() {
            currentIndex = index;
          });
        }
      }
    }
    
    

    对应的页面View

    
    //子页面
    class ChildItemView extends StatefulWidget {
      String _title;
    
      ChildItemView(this._title);
    
      @override
      _ChildItemViewState createState() => _ChildItemViewState();
    }
    
    class _ChildItemViewState extends State<ChildItemView> {
      @override
      Widget build(BuildContext context) {
        return Container(
          child: Center(child: Text(widget._title)),
        );
      }
    }
    
    展开全文
  • Flutter实现底部导航栏

    2020-08-26 08:39:37
    主要为大家详细介绍了Flutter实现底部导航栏的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 底部弹出框

    2017-07-11 22:13:32
    相册/拍照、支付宝支付/微信支付底部弹出对话框
  • HTML5手机底部菜单

    2016-12-08 08:49:18
    手机底部菜单
  • ViewPager底部小圆点指示
  • cell过于少,导致tabelfootView飞在上面,我想让他贴着tableView的底部,而不是cell的底部,这个该怎么设置
  • css 京东底部菜单按钮悬浮层 css 京东底部菜单按钮悬浮层
  • 看了下别人分享的vue自定义底部导航自己摸索着写了一个mpvue的小程序自定义底部导航
  • 安卓 仿闲鱼底部

    2018-05-19 18:27:55
    商城界面 仿闲鱼底部栏 商城界面 仿闲鱼底部栏 商城界面 仿闲鱼底部
  • Android开发丶底部导航栏

    万次阅读 多人点赞 2019-06-24 09:30:21
    1.首先是分析界面,底部导航栏我们可以用一个占满屏幕宽度、包裹着数个标签TextView、方向为横向horizontal的线性布局LinearLayout。上方则是一个占满剩余空间的FrameLayout。 activity_main.xml <?xml ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 474,161
精华内容 189,664
关键字:

底部