RadioButton+Fragment仿淘宝导航栏

因为博主本人是初学者,所以本文参考了多位大佬的文章后才弄明白,以下代码由本人根据多位博主的文章整合修改完成

效果图



主布局xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><RadioGroupandroid:id="@+id/rg_main"android:layout_width="match_parent"android:layout_height="80dp"android:layout_alignParentBottom="true"android:background="@color/white"android:orientation="horizontal"><RadioButtonandroid:id="@+id/rb_home"style="@style/tab_menu_item"android:drawableTop="@drawable/home_button_selector"android:text="主页"/><RadioButtonandroid:id="@+id/rb_type"style="@style/tab_menu_item"android:drawableTop="@drawable/fenlei_button_selector"android:text="分类"/><RadioButtonandroid:id="@+id/rb_msg"style="@style/tab_menu_item"android:drawableTop="@drawable/msg_button_selector"android:text="消息"/><RadioButtonandroid:id="@+id/rb_car"style="@style/tab_menu_item"android:drawableTop="@drawable/car_button_selector"android:text="购物车"/><RadioButtonandroid:id="@+id/rb_user"style="@style/tab_menu_item"android:drawableTop="@drawable/mine_button_selector"android:text="我的"/></RadioGroup> //导航栏与上方界面之间的一条线<Viewandroid:id="@+id/tab_bar"android:layout_width="match_parent"android:layout_height="2px"android:layout_above="@+id/rg_main"/><FrameLayoutandroid:id="@+id/frameLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/tab_bar"></FrameLayout></RelativeLayout>

主布局中的这一句android:drawableTop="@drawable/home_button_selector"中用到的home_button_selector,这里我只写一个,其他四个和这个原理相同(放在drawable文件下,其中用到的图标图片放在mipmap下)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@mipmap/main1" android:state_checked="false"></item><item android:drawable="@mipmap/main2" android:state_checked="true"></item></selector>

我们可以把RadioButton中用到的重复代码放在style中

<style name="tab_menu_item"><item name="android:layout_width">0dp</item><item name="android:layout_weight">1</item><item name="android:layout_height">match_parent</item><item name="android:background">@drawable/button_bg_selector</item><item name="android:button">@null</item><item name="android:gravity">center</item><item name="android:paddingTop">3dp</item><item name="android:textColor">@drawable/bottom_button_text_selector</item><item name="android:textSize">18sp</item>
</style>

上面style中的drawable/button_bg_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true"><!--形状定义工具--><shape><!--设置形状填充的颜色,只有android:color一个属性--><solid android:color="@color/lightgray" /></shape></item><item><shape><solid android:color="@color/lightgray" /></shape></item></selector>

上面style用到的bottom_button_text_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:color="#535353" android:state_checked="false"></item><item android:color="#ff4040" android:state_checked="true"></item>//文字颜色
</selector

fragment的xml文件,随便写一个布局,这里只写一个示例,其余四个就不写了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".CarFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="这里是购物车" /></LinearLayout>

fragment的java文件,这里也只写一个示例

package com.example.shoppingmall;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.fragment.app.Fragment;public class CarFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.fragment_car, container, false);return view;}
}

ShopActivity

package com.example.shoppingmall;import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;public class ShopActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{private RadioGroup radioGroup;private RadioButton rb_home;//Fragment Objectprivate HomeFragment fg1;private TypeFragment fg2;private  MsgFragment fg3;private CarFragment fg4;private MineFragment fg5;private FragmentManager fManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.shop);fManager = getSupportFragmentManager();radioGroup = (RadioGroup) findViewById(R.id.rg_main);radioGroup.setOnCheckedChangeListener(this);//获取第一个单选按钮,并设置其为选中状态rb_home = (RadioButton) findViewById(R.id.rb_home);rb_home.setChecked(true);}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {// FragmentTransaction只能使用一次,// 每次使用都要调用FragmentManager 的beginTransaction()方法获得FragmentTransaction事务对象FragmentTransaction fTransaction = fManager.beginTransaction();hideAllFragment(fTransaction);switch (checkedId){case R.id.rb_home:if(fg1 == null){fg1 = new HomeFragment();fTransaction.add(R.id.frameLayout,fg1);}else{fTransaction.show(fg1);}break;case R.id.rb_type:if(fg2 == null){fg2 = new TypeFragment();fTransaction.add(R.id.frameLayout,fg2);}else{fTransaction.show(fg2);}break;case R.id.rb_msg:if(fg3 == null){fg3 = new MsgFragment();fTransaction.add(R.id.frameLayout,fg3);}else{fTransaction.show(fg3);}break;case R.id.rb_car:if(fg4 == null){fg4 = new CarFragment();fTransaction.add(R.id.frameLayout,fg4);}else{fTransaction.show(fg4);}break;case R.id.rb_user:if(fg5 == null){fg5 = new MineFragment();fTransaction.add(R.id.frameLayout,fg5);}else{fTransaction.show(fg5);}break;default:break;}fTransaction.commit();}//隐藏所有Fragmentprivate void hideAllFragment(FragmentTransaction fragmentTransaction){if(fg1 != null)fragmentTransaction.hide(fg1);if(fg2 != null)fragmentTransaction.hide(fg2);if(fg3 != null)fragmentTransaction.hide(fg3);if(fg4 !=null) fragmentTransaction.hide(fg4);if(fg5 != null)fragmentTransaction.hide(fg5);}
}

参考链接
https://blog.csdn.net/yangshangwei/article/details/50909746
https://blog.csdn.net/u012958716/article/details/70210853
https://blog.csdn.net/ss1168805219/article/details/52465349

安卓仿淘宝导航栏实现相关推荐

  1. 使用JQuery实现淘宝导航栏效果

    我们要实现一个淘宝导航栏的效果,先看一下运行效果 要实现这个效果的话我们第一步首先要 1.div布局 设id <div id="context"><div id= ...

  2. 安卓仿淘宝首页的分类标签实现(横向滑动)

    淘宝效果 我的效果 使用recycleview实现 很简单,几行代码(只粘贴 了主要代码) GridLayoutManager gridLayoutManager = new GridLayoutMa ...

  3. Android/安卓仿淘宝直播点赞效果/qq空间点赞效果动画

    之前玩淘宝误入它的直播频道,发现它的直播界面的点赞效果挺好看,然后发现QQ控件点赞有类似动画,于是趁有空花了点时间玩玩. 先上个效果图: 添加了一个按钮模拟点赞,点击多少次就出现多个水果,他们的运动轨 ...

  4. 【iOS开发】导航栏,类似淘宝“我的淘宝”导航栏

    转载地址: https://blog.csdn.net/fanxiaomeng92/article/details/72771666

  5. 安卓项目实践——仿淘宝界面(二)——底部导航栏技术(Fragment实现)

    安卓项目实践--仿淘宝界面(一)--底部导航栏技术(Fragment实现) 1.实现效果展示 2.技术简述 该导航栏主要使用Fragment技术实现,关于Fragment的介绍大家可以自行百度,导航栏 ...

  6. js: 动画 筋斗云导航栏 仿淘宝关闭二维码

    筋斗云导航栏 <!DOCTYPE html> <html> <head lang="en"><meta charset="UTF ...

  7. 仿淘宝Android实现底部导航栏图标溢出效果-clipChildren属性

    1.clipChildren和clipPadding说明 clipChildren用来定义他的子控件是否要在他应有的边界内进行绘制. 默认情况下,clipChild被设置为true. 也就是不允许进行 ...

  8. 仿淘宝左侧菜单导航栏纯Html + css 写的

    这俩天闲来没事淘宝逛了一圈看到淘宝的左侧导航菜单做的是真心的棒啊,一时兴起,查了点资料抓了几个图片仿淘宝写了个css,时间紧写的不太好,大神勿喷,给小白做个参考 废话不多说先来个效果图 接下来直接上代 ...

  9. 纯css仿淘宝京东导航菜单栏

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

最新文章

  1. 帝豪gs车机系统wince_吉利新款帝豪GS,内饰升级大双屏,还不涨价,7万多就能买...
  2. 表格(table、tr、th、td、colspan、rowspan)
  3. 【ABAP】SAP供应商自定义决裁生成实现
  4. python中的with上下文管理器
  5. C语言中include““与include<>的区别(自定义头文件、预设头文件)
  6. 5个球放入3个箱子_国内5个经典的美食小吃,吃过3个以上算厉害,你吃过几个?...
  7. layui搭建的php后台,使用layui框架搭建后台布局
  8. oracle 查询创建了哪些存储过程
  9. css属性选择器,[],=, ~=, ^=, ~=, $=, |=等符号含义
  10. Java 8 Stream
  11. 判断 失效_复合材料渐进失效Hashin模型及参数详解
  12. linux备份系统iso,将Linux系统转换为ISO镜像文件以实现备份
  13. 会员无损音乐各种格式转换成mp3等格式
  14. 【RF】射频集成电路与系统设计
  15. 智能工厂仓库管理系统软件有哪些哪家好呢
  16. 如何在ROS中使用VScode创建功能包并编写cpp文件
  17. autocad2007二维图画法_AutoCAD 2007矩形绘制方法教程
  18. 木本坚果的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 【安全系列】beef-xss攻击示例
  20. 干货来了 | SQL 进阶技巧

热门文章

  1. 【四】彻底搞懂synchronized
  2. Coordinate Attention
  3. 【树】你真的会二叉树了嘛? --二叉树LeetCode专题
  4. 初学Andorid前沿
  5. 将有length属性的对象转换成数组
  6. 【OGG】OGG的下载和安装篇
  7. 计算机组成原理——MDR与MAR
  8. landsat 卫星影像的常见问题(去云、是否进行几何和大气校正以及数据产品的处理级别)
  9. 以色列突然宣布:颠覆了人类的思维
  10. 请查收,会员积分商城系统外包运营攻略!