Android(安卓)UI—仿微信底部导航栏布局
声明:原文转自博客作者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+架构视频+面试文档+源码笔记》(不是本人发放)
来获取学习资料提升自己去挑战一下
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
更多相关文章
- Android(安卓)DataBinding的使用
- 小游戏Mixed Color源代码分享
- day01
- Android活动进出场动画
- android中配置文件property的用途以及使用
- 【转】android中onMeasure初看,深入理解布局之一!
- Android(安卓)横屏切换竖屏Activity的生命周期
- android的Jetpack的navigation原理详解
- 安卓 屏蔽子控件点击事件