文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

安卓:BottomNavigationBar——底部导航栏控件

2023-09-29 19:33

关注

目录

一、BottomNavigationBar介绍

二、BottomNavigationBar的常用方法及其常用类

(一)、常用方法

1. 添加菜单项

2. 移除菜单项

3. 设置选中监听器

4. 设置当前选中项 

5. 设置徽章

 6. 样式和颜色定制

7. 动画效果 

8. 隐藏底部导航栏。

 9、设置模式

10.初始化 bottomNavigation

 (二)、常用类

 TextBadgeItem常用方法:

 ShapeBadgeItem常用方法:

三、bottomNavigation的使用例子 

一、BottomNavigationBar介绍

        BottomNavigationBar是一个用于Android应用程序的底部导航栏控件,通常用于在应用程序的不同页面之间进行快速切换。它提供了一种直观且易于使用的导航方式,使用户可以轻松访问应用程序的各个模块。

依赖包:

implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.4'

二、BottomNavigationBar的常用方法及其常用类

(一)、常用方法

        BottomNavigationBar提供了一系列常用的方法,用于定制和管理底部导航栏的外观和行为。以下是BottomNavigationBar的常用方法及其调用例子的详细介绍:

1. 添加菜单项

2. 移除菜单项

3. 设置选中监听器

4. 设置当前选中项 

5. 设置徽章

 6. 样式和颜色定制

7. 动画效果 

8. 隐藏底部导航栏。

 9、设置模式

  1. MODE_FIXED:固定模式

    • 当导航栏的菜单项个数小于等于3个时,推荐使用此模式。
    • 在固定模式下,所有的菜单项会平均分布在底部导航栏中,且大小相等。
  2. MODE_SHIFTING:移动模式

    • 当导航栏的菜单项个数大于3个时,推荐使用此模式。
    • 在移动模式下,当前选中的菜单项会突出显示,而其他未选中的菜单项则会缩小并向上移动。

10.初始化 bottomNavigation

 (二)、常用类

  1. BottomNavigationBar:底部导航栏的主要类,用于创建和管理底部导航项。通过该类,可以设置导航栏的模式、背景样式、菜单项等属性,并监听导航项的选中事件。
  2. BadgeItem:角标类,用于在导航栏的菜单项上显示角标。它有两个子类:TextBadgeItem用于在菜单项上显示文本角标。ShapeBadgeItem用于在菜单项上显示形状角标,如圆形、方形等。 
  3. BottomNavigationItem:底部导航项的类,用于创建每个菜单项。通过该类,可以设置图标、和选中状态的图标。
  4. OnTabSelectedListener:底部导航栏的选项卡选中监听器接口。通过实现该接口,可以监听到选项卡的选中事件,并在相应的回调方法中进行处理。
  5. BadgeAnimation角标动画类,用于定义角标的出现和消失动画效果。

 TextBadgeItem常用方法

 ShapeBadgeItem常用方法

三、bottomNavigation的使用例子 

MainActivity: 

package com.example.bottomnavigationbardemo;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.FragmentManager;import androidx.fragment.app.FragmentTransaction;import android.graphics.Color;import android.os.Bundle;import android.util.TypedValue;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.ashokvarma.bottomnavigation.BottomNavigationBar;import com.ashokvarma.bottomnavigation.BottomNavigationItem;import com.ashokvarma.bottomnavigation.ShapeBadgeItem;import com.ashokvarma.bottomnavigation.TextBadgeItem;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {    private FragmentManager mFragmentManager;    private BottomNavigationBar mBottomNavigationBar;    TextBadgeItem mTextBadgeItem;    ShapeBadgeItem mShapeBadgeItem;    private FirstFragment firstFragment;    private SecondFragment secondFragment;    private ThirdFragment thirdFragment;    private FragmentTransaction transaction;    int curPosition;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mBottomNavigationBar = findViewById(R.id.bottom_navigation_bar);        initBottomNavigationBar();    }    private void initBottomNavigationBar() {        // 设置固定模式        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);        // 设置点击事件        mBottomNavigationBar.setTabSelectedListener(this);        List items= getBottomNavigationItem();        mBottomNavigationBar.addItem(items.get(0))                .setFirstSelectedPosition(0)                .addItem(items.get(1))                .addItem(items.get(2))                // 此方法应在所有自定义方法结束时调用。此方法将考虑所有更改并重新绘制选项卡。                .initialise();                setDefaultFragment();    }    private List getBottomNavigationItem() {        initBadgeItem();        // 用来存item的集合        List items = new ArrayList<>();        // 创建Item1        BottomNavigationItem homeItem = new BottomNavigationItem(R.drawable.home,"首页");        // 设置被点击时的颜色        homeItem.setActiveColor(R.color.purple_500).setBadgeItem(mShapeBadgeItem);        // 设置没有被点中的颜色//        homeItem.setInActiveColor(R.color.teal_200);        // 设计没有被点中时的图片资源//        homeItem.setInactiveIconResource(R.drawable.ic_launcher_foreground);        items.add(homeItem);        // 创建Item2        BottomNavigationItem messageItem = new BottomNavigationItem(R.drawable.message,"信息");        // 设置被点击时的颜色设置没有被点中的颜色        messageItem.setActiveColor(R.color.purple_500)//        .setInActiveColor(R.color.teal_200)        .setBadgeItem(mTextBadgeItem);//        .setInactiveIconResource(R.drawable.ic_launcher_foreground);        items.add(messageItem);        // 创建Item2        BottomNavigationItem personage = new BottomNavigationItem(R.drawable.person,"个人信息");        // 设置被点击时的颜色设置没有被点中的颜色        personage.setActiveColor(R.color.purple_500);//                .setInActiveColor(R.color.teal_200)//                .setInactiveIconResource(R.drawable.ic_launcher_foreground);        items.add(personage);        return items;    }        private void initBadgeItem() {        mTextBadgeItem = new TextBadgeItem();        mTextBadgeItem.setText("99+")                .setTextColor("#ffffff")                .setBorderWidth(5)                .setBackgroundColor("#ff4083")                .setHideOnSelect(false); // 选中是否隐藏//                .setGravity(Gravity.TOP); // 设置位置        mShapeBadgeItem = new ShapeBadgeItem();        mShapeBadgeItem.setShape(ShapeBadgeItem.SHAPE_OVAL)                .setShapeColor(Color.RED)                .setEdgeMarginInDp(this,0) // 距离item的边距,dP                .setSizeInDp(this, 15, 15) //宽高值,dp                .setHideOnSelect(false)                .setAnimationDuration(300); //隐藏和展示的动画速度,单位毫秒,和setHideOnSelect一起使用    }        private void setDefaultFragment() {        mFragmentManager = getSupportFragmentManager();        FragmentTransaction transaction = mFragmentManager.beginTransaction();        firstFragment = new FirstFragment();        transaction.add(R.id.tb, firstFragment);        transaction.commit();    }        private void hideFragment(FragmentTransaction transaction) {        if (firstFragment != null) {            transaction.hide(firstFragment);        }        if (secondFragment != null) {            transaction.hide(secondFragment);        }        if (thirdFragment != null) {            transaction.hide(thirdFragment);        }    }    @Override    public void onTabSelected(int position) {        curPosition = position;//每次点击赋值        //开启事务        transaction = mFragmentManager.beginTransaction();        // 隐藏当前的fragment        hideFragment(transaction);        switch (position) {            case 0:                if (firstFragment == null) {                    firstFragment = new FirstFragment();                    transaction.add(R.id.tb, firstFragment);                } else {                    transaction.show(firstFragment);                }                // transaction.replace(R.id.tb, firstFragment);                break;            case 1:                if (secondFragment == null) {                    secondFragment = new SecondFragment();                    transaction.add(R.id.tb, secondFragment);                } else {                    transaction.show(secondFragment);                }                break;            case 2:                if (thirdFragment == null) {                    thirdFragment = new ThirdFragment();                    transaction.add(R.id.tb, thirdFragment);                } else {                    transaction.show(thirdFragment);                }                break;        }        // 事务提交        transaction.commit();    }    @Override    public void onTabUnselected(int position) {        // 没有被选中时,调用该方法    }    @Override    public void onTabReselected(int position) {        // 再次选中时,调用此方法    }}

代码解析:

MainActivity 类是一个包含底部导航栏的活动。在 onCreate() 方法中,通过调用 initBottomNavigationBar() 初始化了底部导航栏。

initBottomNavigationBar() 方法中:

getBottomNavigationItem() 方法中:

除此之外,还定义了其他方法:

总结:该代码是一个包含底部导航栏的活动,通过点击底部选项卡来切换显示不同的片段。可以根据需要修改底部导航栏的样式、添加更多的选项卡和设置对应的片段。

 FirstFragment :

package com.example.bottomnavigationbardemo;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import androidx.annotation.NonNull;import androidx.fragment.app.Fragment;public class FirstFragment extends Fragment {    @Override    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.activity_first_fragment, container, false);        return view;    }}

 activity_first_fragment:

    

activity_main: 

            

注意: SecondFragment、ThirdFragment和FirstFragment的代码一样,其布局文件也跟activity_first_fragment一样。

运行效果:

 

 

 四、总结

        BottomNavigationBar(底部导航栏)是一种常见的用户界面设计模式,常用于移动应用程序中。下面是 BottomNavigationBar 的优点和缺点的总结:

优点:

提供直观的导航:底部导航栏通常位于屏幕底部,使用户可以轻松访问主要功能和导航选项。这种布局方式更符合用户的自然操作习惯,提供了直观的导航体验。
2. 节省屏幕空间:将导航选项放置在底部,可以节省屏幕顶部的空间,更多地用于显示应用程序的内容。尤其对于大屏幕设备,这种设计可以更好地利用屏幕空间。
3. 易于使用手指操作:由于底部导航栏靠近手指自然的位置,用户可以轻松地使用拇指进行导航,而无需频繁改变手持设备的姿势。
4. 强调当前位置:通过高亮显示当前活动或选中的导航选项,底部导航栏可以帮助用户更清楚地知道自己所处的位置,并提供上下文导航。

缺点:

屏幕空间限制:虽然底部导航栏节省了屏幕顶部的空间,但它也会占用屏幕底部的一定高度。对于某些应用程序而言,这可能会减少可用的内容显示区域。
2. 选项数量限制:底部导航栏通常适用于不超过五个主要功能或导航选项的应用程序。如果选项过多,可能会导致导航栏变得拥挤,难以识别和操作。
3. 设计一致性:底部导航栏是一种常见的设计模式,但并不适用于所有应用程序。在选择使用底部导航栏时,需要确保它与应用程序的整体设计风格和用户期望一致。

        综上所述,BottomNavigationBar 提供了直观、节省空间和易于操作的优点,但也存在屏幕空间限制和选项数量限制等一些缺点。在设计应用程序时,需要仔细考虑是否采用底部导航栏,并确保与应用程序的整体设计一致。

 

来源地址:https://blog.csdn.net/A125679880/article/details/130038876

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯