声明:原文转自博客作者FlyElephant,如有侵权,请联系删除
原文链接:http://www.cnblogs.com/xiaofeixiang
https://www.cnblogs.com/xiaofeixiang/p/4156732.html

正文

现在App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户可以随便切换看不同的内容,说是情怀也好,用户体验也罢。我们开发的主要的还是讲的是如何如何实现其功能,网上实现的方式无外乎两种,一种是使用tabhost进行切换,一种是直接使用Fragment进行切换,底部导航栏的布局有的使用的是线性布局,有的是使用的RadioGroup,本文中是使用fragment+RadioGroup是实现的,看正文吧:

基础布局

其中主要低 底部导航栏,其他都没有什么,上面是一个Fragment自己替换一下即可

activity_main.xml中的布局文件,由于样式比较多可以单独的放在style中的,鉴于方便查看,直接放在布局文件中,activity_main中的代码:

                

看下新建的布局和资源文件:

其中tab_selector_tv_color.xml主要是用于控制切换的时候显示下面字体的颜色:

`<?xml version=``"1.0"` `encoding=``"utf-8"``?>```````````

其中tab_selector_checked_bg.xml布局文件选中的时候每个RadioButtton的背景颜色:

`<?xml version=``"1.0"` `encoding=``"utf-8"``?>```````

其中tab_selector_weixing.xml主要是点击的时候显示不同的图片,一个是绿色的,一个是白色:

`<?xml version=``"1.0"` `encoding=``"utf-8"``?>`````````

其中需要切换的chat.xml,address.xml,find.xml,me.xml都是一样的,其中chat.xml代码如下:

`<?xml version=``"1.0"` `encoding=``"utf-8"``?>`````````

实现Demo

MainActivity.java中的代码,主要的就是设置一下OnCheckedChangeListener,注意MainActivity中需要继承FragmentActivity:

`public` `void` `initView() {``chat = ``new` `FragmentChat();``getSupportFragmentManager().beginTransaction().replace(R.id.main_content, chat).commit();``myTabRg = (RadioGroup) findViewById(R.id.tab_menu);``myTabRg.setOnCheckedChangeListener(``new` `OnCheckedChangeListener() {``@Override``public` `void` `onCheckedChanged(RadioGroup group, ``int` `checkedId) {``// TODO Auto-generated method stub``switch` `(checkedId) {``case` `R.id.rbChat:``chat = ``new` `FragmentChat();``getSupportFragmentManager().beginTransaction().replace(R.id.main_content, chat)``.commit();``break``;``case` `R.id.rbAddress:``if` `(address==``null``) {``address =``new` `FragmentAddress();``}``Log.i(``"MyFragment"``, ``"FragmentAddress"``);``getSupportFragmentManager().beginTransaction().replace(R.id.main_content, address).commit();``break``;``case` `R.id.rbFind:``find = ``new` `FragmentFind();``getSupportFragmentManager().beginTransaction().replace(R.id.main_content, find)``.commit();``break``;``case` `R.id.rbMe:``me = ``new` `FragmentMe();``getSupportFragmentManager().beginTransaction().replace(R.id.main_content, me)``.commit();``break``;``default``:``break``;``}``}``});`

FragmentChat中的代码,其余的三个FragmentAddress,FragmentFind,FragmentMe类似,就不贴代码了,主要是继承Fragment 即可:

`public` `class` `FragmentChat ``extends` `Fragment {``@Override``public` `void` `onCreate(Bundle savedInstanceState) {``// TODO Auto-generated method stub``super``.onCreate(savedInstanceState);``}``@Override``public` `View onCreateView(LayoutInflater inflater,``@Nullable` `ViewGroup container, ``@Nullable` `Bundle savedInstanceState) {``// TODO Auto-generated method stub``return` `inflater.inflate(R.layout.chat, ``null``);``}``}`

最后看张通讯录的截图吧:

最后

一点题外话:

之前答应大家整理的资料都整理好了

点击:

《Android学习PDF+架构视频+面试文档+源码笔记》(不是本人发放)

 

来获取学习资料提升自己去挑战一下

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

更多相关文章

  1. Android(安卓)DataBinding的使用
  2. 小游戏Mixed Color源代码分享
  3. day01
  4. Android活动进出场动画
  5. android中配置文件property的用途以及使用
  6. 【转】android中onMeasure初看,深入理解布局之一!
  7. Android(安卓)横屏切换竖屏Activity的生命周期
  8. android的Jetpack的navigation原理详解
  9. 安卓 屏蔽子控件点击事件

随机推荐

  1. 页面刷新后删除了Java会话
  2. 小学徒进阶系列—JVM对String的处理
  3. 关于几个位运算的算法分析
  4. Java保存特大数据
  5. javascript 设计模式之观察者模式
  6. hbase编程:通过Java api操作hbase
  7. 初学Java:我为什么来学Java?
  8. 使用Java中的Scala:将函数作为参数传递
  9. 【JAVA】用java编写程序时总提示缺少方法
  10. 来谈谈JAVA面向对象 - 鲁班即将五杀,大乔