RadioGroup RadioButton底部导航栏
参考: https://blog.csdn.net/lu202032/article/details/117632709
activity_home.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><FrameLayoutandroid:id="@+id/nav_host_fragment_activity_main"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><!-- https://blog.csdn.net/lu202032/article/details/117632709 --><RadioGroupandroid:id="@+id/ra_group"android:layout_width="match_parent"android:layout_height="70dp"android:gravity="center_vertical"android:orientation="horizontal"><RadioButtonandroid:id="@+id/home_rb_home"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_weight="1"android:button="@null"android:checked="true"android:drawableTop="@drawable/ic_home_frag_home"android:drawablePadding="3dp"android:gravity="center"android:text="首页"android:textColor="@drawable/home_tv_tc_sel" /><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"><RadioButtonandroid:id="@+id/home_rb_bill"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:button="@null"android:drawableTop="@drawable/ic_home_frag_bill"android:drawablePadding="3dp"android:gravity="center"android:text="账单"android:textColor="@drawable/home_tv_tc_sel"app:layout_constraintTop_toTopOf="parent" /><!-- 角标 --><TextViewandroid:id="@+id/home_rb_bill_badge"android:layout_width="5dp"android:layout_height="5dp"android:layout_alignParentTop="true"android:layout_alignParentRight="true"android:layout_marginEnd="-28dp"android:background="@drawable/home_rb_bill_badge"android:gravity="center"android:minWidth="5dp"android:minHeight="5dp"android:textColor="#FFFFFF"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout><RadioButtonandroid:id="@+id/home_rb_my"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/ic_home_frag_my"android:drawablePadding="3dp"android:gravity="center"android:text="我的"android:textColor="@drawable/home_tv_tc_sel" /></RadioGroup>
</LinearLayout>
ic_home_frag_home
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true" android:drawable="@drawable/ic_home_frag_home_sel" /><item android:drawable="@drawable/ic_home_frag_home_def" />
</selector>
home_tv_tc_sel
<!-- res/drawable/home_tab.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true" android:color="#FF0000" /> <!-- 选中状态的颜色 --><item android:color="#808080" /> <!-- 默认状态的颜色 -->
</selector>
HomeActivity.java
public class HomeActivity extends BaseActivity<ActivityHomeBinding> {private BroadcastReceiver receiver;private x1Fragment x1Fragment;private xxxFragment xxxFragment;private x2Fragment x2Fragment;private x1FragmentType currentFragment;public static void open(BaseActivity context) { Intent starter = new Intent(context, HomeActivity.class); context.startActivity(starter);context.finish();}@Overrideprotected ActivityHomeBinding getViewBinding() {return ActivityHomeBinding.inflate(getLayoutInflater());}@Overridepublic void initData() { }@Overridepublic void initView() {setFragment(x1FragmentType.home);}public void setFragment(x1FragmentType fragType) {//获取Fragment管理器FragmentManager mFragmentManager = getSupportFragmentManager();//开启事务FragmentTransaction mTransaction = mFragmentManager.beginTransaction();//隐藏所有FragmenthideFragments(mTransaction);switch (fragType) {case home:if (x1Fragment == null) {x1Fragment = new x1Fragment();mTransaction.add(R.id.nav_host_fragment_activity_main, x1Fragment, "x1Fragment");} else {mTransaction.show(x1Fragment);}break;case bill:if (xxxFragment == null) {xxxFragment = new xxxFragment();mTransaction.add(R.id.nav_host_fragment_activity_main, xxxFragment, "xxxFragment");} else {mTransaction.show(xxxFragment);}break;case my:if (x2Fragment == null) {x2Fragment = new x2Fragment();mTransaction.add(R.id.nav_host_fragment_activity_main, x2Fragment, "x2Fragment");} else {mTransaction.show(x2Fragment);}break;default:break;}//提交事务mTransaction.commitAllowingStateLoss();currentFragment = fragType;}//隐藏Fragmentprivate void hideFragments(FragmentTransaction transaction) {if (xxxFragment != null) transaction.hide(xxxFragment);if (x1Fragment != null) transaction.hide(x1Fragment);if (x2Fragment != null) transaction.hide(x2Fragment);}@Overridepublic void setListener() {mBinding.raGroup.setOnCheckedChangeListener((group, checkedId) -> {if (checkedId == R.id.home_rb_home) {setFragment(x1FragmentType.home);} else if (checkedId == R.id.home_rb_bill) {setFragment(x1FragmentType.bill);} else if (checkedId == R.id.home_rb_my) {setFragment(x1FragmentType.my);}});}
}
home_rb_bill_badge.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- res/drawable/badge_background.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#FF0000"/> <!-- 红色背景 --><sizeandroid:width="20dp"android:height="20dp"/>
</shape>
相关文章:

RadioGroup RadioButton底部导航栏
参考: https://blog.csdn.net/lu202032/article/details/117632709 activity_home.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://sch…...

SQL分类中的DQL
DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录。 一、DQL语法 编写顺序 执行顺序 SELECT 字段列表 5 FROM 表名列表 1 WHERE 条件列表 2 GROUP BY 分组字段列表 3 HAVING 分组后条件列表 4 ORDER BY 排…...

1.3.ReactOS系统 PAGED_CODE 宏函数的实现
#ReactOS系统 PAGED_CODE 宏函数的实现 ReactOS系统 PAGED_CODE 宏函数的实现 文章目录 PAGED_CODE 宏函数的实现 PAGED_CODE 宏函数的实现 #ifdef DBG#define PAGED_CODE() \if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \{ \VideoPortDebugPrint(Error, "V…...

【论文速看】DL最新进展20241015-目标检测、图像超分
目录 【目标检测】【图像超分】 【目标检测】 [ECCV2024] LaMI-DETR: Open-Vocabulary Detection with Language Model Instruction 论文链接:https://arxiv.org/pdf/2407.11335 代码链接:https://github.com/eternaldolphin/LaMI-DETR 现有方法通过利…...

京准电钟:NTP时间服务器让大数据时钟同步
京准电钟:NTP时间服务器让大数据时钟同步 京准电钟:NTP时间服务器让大数据时钟同步 NTP是一种用于同步网络中设备时间的协议,广泛用于互联网和局域网中。NTP网络时间服务器则是基于NTP协议构建,为网络中的设备提供时间同步服务的服…...

SSL免费证书申请(七牛云/阿里云等)
最近运维的几个项目SSL证书要过期了,领导一直催促着要搞,然后也是在网上找了各种链接、各种方式(谨防上当受骗)、各种收费; 于是我记录一下我自己生成SSL证书的过程。 前几年我依稀记得免费时间有一年以上的ÿ…...

十二、结构型(代理模式)
代理模式(Proxy Pattern) 概念 代理模式(Proxy Pattern)是一种结构型设计模式,代理对象在不改变目标对象功能的前提下,通过控制对目标对象的访问,来实现延迟加载、权限控制、日志记录等功能。代…...

使用 python 下载 bilibili 视频
本文想要达成的目标为:运行 python 代码之后,在终端输入视频链接,可自动下载高清 1080P 视频并保存到相应文件夹。 具体可分为两大步:首先,使用浏览器开发者工具 F12 获取请求链接相关信息(根据 api 接口下…...

DevExpress WinForms中文教程:Data Grid - 如何点击获取信息?
在使用DevExpress WinForms的Data Grid之类控件时,可能需要实现自定义用户交互,例如显示数据行的上下文菜单,或者在双击一行时调用编辑表单。在这些情况下,您需要在指定的坐标处标识网格元素。 在本教程中,您将学习如…...

真空牛肉滚揉机的优点:
真空滚揉机是一种用于食品加工的设备,主要用于肉类深加工,如肉食制品和低温火腿的生产。 它通过滚揉、按压和腌制的过程,在真空状态下将原料肉与辅料、添加剂均匀混合,以提高肉制品的质量和口感。 真空滚揉机的工作原理是利…...

【物流配送中心选址问题】基于退火算法混合粒子群算法
课题名称: 基于退火算法混合粒子群算法的物流配送中心选址问题 改进方向:模拟退火算法优化粒子群算法 代码获取方式(付费): 模型说明: 待补充 Matlab仿真结果: 1. 模型优化后的仿真结果 2…...

elasticsearch 8.2 版本账号密码设置及SSL设置
背景:elasticsearch 8.2 设置账号密码-CSDN博客 failed to load SSL configuration does not contain any trusted certificate entries [2024-10-08T17:06:53,704][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main] org…...

git gui基本使用
一、图形化界面 二、创建新项目 创建文件,加入暂存区,提交到版本库 三、创建分支 四、合并分支 1.切换至master 五、更新分支 六、解决冲突 修改冲突,加入暂存区,提交到版本库 七、远程创建库 Gitee - 基于 Git 的代码托管和研…...

从automaxprocs库浅窥Linux容器的资源控制
automaxprocs能够自动调整Go程序中的Goroutine数量,以充分利用系统资源并提高程序的性能。 automaxprocs通过读取系统信息,如CPU核心数和Cgroups限制,来动态调整Goroutine的数量 automaxprocs获取CPU限额的关键方法在 // CPUQuotaToGOMAXP…...

AI 读文献(二):综述论文10倍速读和整理
我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 上一篇娜姐讲了research研究论文的速度框架和效果, AI阅读研究论文,这个方法10倍速提升效率还不损失关键信息! 学员们反馈效果很好&#x…...

【AAOS】Android Automotive 10模拟器源码下载及编译
源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r47 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch aosp_car_x86_64-userdebug make -j8 运行效果 emualtor Cluster Home Map All …...

前端开发攻略---使用css实现滚动吸附效果
实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title><style>…...

解析 MySQL 查询优化:提升性能的十个关键策略
1. 避免全表扫描 当查询的数据量非常大时,全表扫描的效率会很低。应尽量通过在WHERE和ORDER BY涉及的列上创建索引,避免全表扫描。索引就像一本书的目录,可以快速定位到需要的数据,而不用从头开始逐页查找。 示例: 如…...

QT--QPushButton设置文本和图标、使能禁能、信号演示
按钮除了可以设置显示文本之外,还可以设置图标 文本 可以获取和设置按钮上显示的文本 // 获取和设置按钮的文本 QString text() const void setText(const QString &text)该属性,既可以在 Qt 设计师右侧的属性窗口中修改,也可以在代码…...

PostgreSQL学习笔记六:模式SCHEMA
模式(Schema) PostgreSQL中的模式(Schema)是一个命名的数据库对象集合,包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象,使得同一个数据库中可以包含…...

基础IO -- 理解文件(1)
目录 一:回顾文件 二:加深对文件的理解 1.概念 2.以w写方式打开 3.以a追加方式打开 4.重定向 一:回顾文件 以前学习过在C语言中的文件操作, 但那根本是不足以理解文件的,即站在语言角度是不可能理解文件的 我们要…...

golang包管理
package 在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。 包与依赖管理 本章学习目标 掌握包的定义和使用掌握init初始化函数的使用掌握…...

outlook 添加企业邮箱账号出现 553 authentication is required 错误解决
系统报错如下 问题原因 发件服务器身份验证设置错误,或者未勾选发送服务器验证的选项。 解决方案 Outlook客户端 本文以Outlook 2016为例,具体操如下: 1、在Outlook客户端的电子邮件设置窗口中,单击其他设置; 2、…...

一个开源可本地部署的英文翻译服务----EnToZhAPI
EnToZhAPI项目简介 项目背景 提供本地化的英文翻译服务API。支持单句翻译请求或者批量翻译请求。支持建立查询词汇表。 项目架构 前端:使用原生js,使用MDB作为CSS框架。django模板引擎渲染可视化界面。 后端:使用waitress作为后端服务器…...

【unity】编辑器扩展——在OnValidate中创建、删除游戏物体
我们知道在OnValidate中创建游戏物体会发出警告,删除游戏物体会报错。 所以我们使用协程,将开始动作的信号放在OnValidate中,将动作的执行放在帧结尾。 参考代码如下: using System.Collections; using UnityEngine;public clas…...

学习记录:js算法(六十四):最后一块石头的重量
文章目录 最后一块石头的重量思路一思路二 最后一块石头的重量 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x < y。那么粉碎的可能结果如…...

单片机探秘:从理论到应用
单片机探秘:从理论到应用 在这个科技飞速发展的时代,单片机的应用如同一颗璀璨的星星,照亮了我们生活的方方面面。今天,让我们一同深入探讨单片机的原理与应用,揭开这个技术领域的神秘面纱。 1. 单片机概述 1.1 什么…...

options妙用
options妙用 设置默认浏览器为 Chrome options(browser “chrome”) 再次尝试运行 igsva() res <- igsva() 加载 BiocManager library(BiocManager) 设置超时时间 options(timeout 3600) 安装包 BiocManager::install(c(“org.Hs.eg.db”, “org.Mm.eg.db”)) …...

UE5 圆周运动、贝塞尔曲线运动、贝塞尔曲线点
圆周运动 贝塞尔曲线路径运动 蓝图函数库创建贝塞尔曲线点 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "MyB…...

线程局部存储(TLS)
很多时候,我们可能想存储一些线程的私有数据,属于线程的私有变量有局部变量,函数的参数,假如我们要在线程中存储全局变量,多个线程访问都对这个变量有自己的一个副本。 一、隐式实现 __thread int a; //linux __dec…...