实现NavigationBar的两种方式
方式1:使用BottomNavigationView控件
xml代码:
<!--底部导航栏--><com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/main_navigation_bar"android:layout_width="match_parent"android:layout_height="49dp"android:layout_alignParentBottom="true"app:itemIconTint="@drawable/navigation_bar_bg"app:itemTextColor="@drawable/navigation_bar_bg"android:background="@color/white"app:menu="@menu/my_navigation_items"/>
需要在menu菜单中配置每个item
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/home"android:icon="@mipmap/home_normal"android:title="@string/text_home" /><itemandroid:id="@+id/selected"android:icon="@mipmap/select_normal"android:title="@string/text_selected" /><itemandroid:id="@+id/red_packet"android:icon="@mipmap/red_packet_normal"android:title="@string/text_packet" /><itemandroid:id="@+id/search"android:icon="@mipmap/search_normal"android:title="@string/text_search" />
</menu>
java代码中获取对应的id即可处理点击事件:
private void initListener() {mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {int itemId = item.getItemId();switch (itemId) {case R.id.home:switchFragment(mHomePageFragment);Logit.d(TAG, " cfx " + item.getTitle());break;case R.id.selected:switchFragment(mSelectedPageFragment);Logit.d(TAG, " cfx " + item.getTitle());break;case R.id.red_packet:switchFragment(mRedPacketPageFragment);Logit.d(TAG, " cfx " + item.getTitle());break;case R.id.search:switchFragment(mSearchPageFragment);Logit.d(TAG, " cfx " + item.getTitle());break;}return true;}});}
方式2:通过自定义RadioGroup实现
xml布局
<!--RadioGroup继承子LinearLayout,需要设置orientation--><RadioGroupandroid:id="@+id/test_navigation_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:orientation="horizontal"><!--android:background="@null" 没有了默认点击的阴影效果--><!--android:button="@null" 取消RadioButton前面的选择框--><RadioButtonandroid:id="@+id/test_home"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:background="@null"android:button="@null"android:drawableTop="@drawable/test_home_selector"android:gravity="center"android:text="@string/text_home"android:textColor="@drawable/navigation_bar_bg"android:textSize="18sp" /><RadioButtonandroid:id="@+id/test_selected"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/test_selected_selector"android:gravity="center"android:text="@string/text_selected"android:textColor="@drawable/navigation_bar_bg"android:textSize="18sp" /><RadioButtonandroid:id="@+id/test_red_packet"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/test_packet_selector"android:gravity="center"android:text="@string/text_packet"android:textColor="@drawable/navigation_bar_bg"android:textSize="18sp" /><RadioButtonandroid:id="@+id/test_search"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/test_search_selector"android:gravity="center"android:text="@string/text_search"android:textColor="@drawable/navigation_bar_bg"android:textSize="18sp" /></RadioGroup><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_above="@+id/test_navigation_bar"android:layout_marginBottom="20dp"android:background="@color/colorGrey" />
java代码找到相应的控件:
public class TextNavigationBarActivity extends AppCompatActivity {@BindView(R.id.test_toast)public Button mTestToast;@BindView(R.id.test_navigation_bar)public RadioGroup mNavigationBar;private HomePageFragment mHomePageFragment;private SelectedPageFragment mSelectedPageFragment;private RedPacketPageFragment mRedPacketPageFragment;private SearchPageFragment mSearchPageFragment;private FragmentManager mFragmentManager;@Overrideprotected void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_text_navigation_bar);ButterKnife.bind(this);initFragment();initListener();switchFragment(mHomePageFragment);}private void initFragment() {mHomePageFragment = new HomePageFragment();mSelectedPageFragment = new SelectedPageFragment();mRedPacketPageFragment = new RedPacketPageFragment();mSearchPageFragment = new SearchPageFragment();mFragmentManager = getSupportFragmentManager();}private void switchFragment(BaseFragment baseFragment) {FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();fragmentTransaction.replace(R.id.test_page_container, baseFragment);fragmentTransaction.commit();}private void initListener() {mTestToast.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 多次点击会造成toast错乱,显示不准确// Toast.makeText(TextNavigationBarActivity.this, "dsad", Toast.LENGTH_SHORT).show();// 使用Toast工具类ToastUtils.showToast("测试Toast");}});mNavigationBar.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int i) {switch (i) {case R.id.test_home:switchFragment(mHomePageFragment);break;case R.id.test_selected:switchFragment(mSelectedPageFragment);break;case R.id.test_red_packet:switchFragment(mRedPacketPageFragment);break;case R.id.test_search:switchFragment(mSearchPageFragment);break;}}});}
}
实现NavigationBar的两种方式相关推荐
- 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题
继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...
- 周一02.3运行python程序的两种方式
一.运行python程序的两种方式 方法一:交互式: 优点:输入一行代码立刻返回结果 缺点:无法永久保存代码 方法 ...
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...
- android不调用系统发送短信,android之两种方式调用短信发送接口
释放双眼,带上耳机,听听看~! 相信很多程序员在开发程序的时候都会遇到短信调用端口的情况,今天是技术狗小编为大家带来的关于android之两种方式调用短信发送接口,希望对你学习这方面知识有帮助! an ...
- android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...
本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...
- VS Code - Debugger for Chrome调试JavaScript的两种方式
VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...
- 简单介绍python连接telnet和ssh的两种方式
本文主要介绍了python连接telnet和ssh的两种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Telnet 连接方式 #!/usr/bin/env p ...
- 简单介绍MySQL开启事务的两种方式
本篇文章给大家分享MySQL 是如何开启一个事务的,原文通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧 方式 1 START TRANSACTION 或 ...
- 两种方式(goto语句以及while循环)实现C语言关机小程序
用C语言写的关机小程序简单易懂,可以拿去整蛊室友同学(每天一个挨打小技巧),下面我就给出两种方式实现这个代码,欢迎大家讨论补充. 1.用goto语句实现: #include <stdio.h&g ...
最新文章
- maven2创建或者导入eclipse工程 设置M2_REPO消除错误
- double小数点后最多几位_花了这么多冤枉钱后,我最喜欢这4款医美氨基酸洗面奶...
- 监控操作系统和服务器,LoadRunner如何监控不同操作系统的服务器?
- Golang 垃圾回收剖析
- nm命令中符号类型详解
- 编译原理—小型(简化)高级语言分析器前端(Java)
- vector 查找结构体对象_面试大厂回来,我狠补了一把算法和数据结构
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
- LeetCode 744. Find Smallest Letter Greater Than Target
- python 使用异常代替返回状态码
- Structure of a Google Docs document 谷歌文档的结构
- 【Scratch画图100例】图39-scratch实心圆 少儿编程 scratch编程画图案例教程 考级比赛画图集训案例
- MATLAB中的偏最小二乘回归(PLSR)和主成分回归(PCR)
- 关于el-dialog弹出层右上角叉号绑定取消按钮功能
- 跨域图片资源权限(CORS enabled image)
- Android开发之svn命令行以及cornerston教程
- 新电脑(UEFI+GPT)下安装Ubuntu16.04
- html圣杯布局,css圣杯布局和双飞翼布局
- Allegro172版本DFM规则之DFA outline
- 生产用计算机房噪音应小于,小知识:机房环境基本要求
热门文章
- win7总是显示加载计算机,win7电脑开机一直卡正在加载个人设置怎么办
- “任性”华为 | 七十八岁老人的“四渡赤水”(二)
- 为什么我们要使用std::alloctor
- 利用移位和加减法实现乘法运算
- 阿布在漏洞复现---心脏滴血(CVE-2014-0160)
- Setup.msi和Setup.exe有什么不同
- 解决msi文件丢失问题
- GoLang之go build命令
- Springer的Latex投稿错误记录
- DLMS电能表通讯协仪