安卓在Fragment控制状态栏显示隐藏

废话不多上效果

隐藏

显示

核心代码

首先是Framgrent

package com.zx.tab;import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;/*** 首页Fragment,用于展示和控制状态栏的显示与隐藏。*/
public class HomeFragment extends Fragment {private static final String ARG_PARAM1 = "首页";private Button btn_hide_status_bar; // 控制隐藏状态栏的按钮private Button btn_show_status_bar; // 控制显示状态栏的按钮// 数据传递监听器接口public interface OnDataPassListener {void onHideStatusBar(String data); // 当隐藏状态栏时被调用void onShowStatusBar(String data); // 当显示状态栏时被调用}// 用于接收Activity传回的监听实例private OnDataPassListener mDataPassListener;// 创建HomeFragment实例的方法,用于传入参数public static HomeFragment newInstance(String param1) {HomeFragment fragment = new HomeFragment();Bundle args = new Bundle();args.putString(ARG_PARAM1, param1);fragment.setArguments(args);return fragment;}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View contentView = inflater.inflate(R.layout.home, container, false);btn_hide_status_bar = contentView.findViewById(R.id.btn_hide_status_bar);btn_show_status_bar = contentView.findViewById(R.id.btn_show_status_bar);// 设置按钮点击事件btn_hide_status_bar.setOnClickListener(v -> {if (mDataPassListener != null) {mDataPassListener.onHideStatusBar("状态栏已隐藏");}});btn_show_status_bar.setOnClickListener(v -> {if (mDataPassListener != null) {mDataPassListener.onShowStatusBar("状态栏已显示");}});return contentView;}// 在Fragment与Activity建立关联时设置监听器@Overridepublic void onAttach(@NonNull Context context) {super.onAttach(context);try {mDataPassListener = (OnDataPassListener) context;} catch (ClassCastException e) {throw new ClassCastException(context.toString() + " 必须实现 OnDataPassListener 接口");}}
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent">
<!--  隐藏状态栏 显示状态栏-->
<Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="隐藏状态栏"android:id="@+id/btn_hide_status_bar"/><Buttonandroid:id="@+id/btn_show_status_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="显示状态栏"/>
</LinearLayout>

布局效果

最后这里是Activity代码

package com.zx.tab;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowInsets;
import android.view.WindowInsetsController;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity implements HomeFragment.OnDataPassListener{private final List<Fragment> fragmentList = new ArrayList<>();private final int[] tabIds = {R.id.ll_home,R.id.ll_mine};private final int[] iconIds = {R.id.im_home,R.id.im_mine};private final int[] textIds = {R.id.tv_home,R.id.tv_mine};private ViewPager2 viewPager2=null;private ImageView[] tabIcons=null;private TextView[] tabTexts=null;private ImageView imCurrent=null;private TextView tvCurrent=null;private LinearLayout ll_tabbar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.initializeViews();this.initViewPager();this.changeTab(0);}private void initializeViews() {this.viewPager2 = findViewById(R.id.viewPager2);this.ll_tabbar=findViewById(R.id.ll_tabbar);LinearLayout[] tabLayouts = new LinearLayout[2];this.tabIcons = new ImageView[2];this. tabTexts = new TextView[2];for (int i = 0; i < 2; i++) {tabLayouts[i] = findViewById(tabIds[i]);tabIcons[i] = findViewById(iconIds[i]);tabTexts[i] = findViewById(textIds[i]);final int index = i;tabLayouts[i].setOnClickListener(view -> {viewPager2.setCurrentItem(index, false);changeTab(index);});}}private void initViewPager() {this. fragmentList.add(HomeFragment.newInstance(getString(R.string.tv_home)));this.fragmentList.add(MeFragment.newInstance(getString(R.string.tv_mine)));this.viewPager2.setAdapter(new FragmentAdapter(getSupportFragmentManager(), getLifecycle(), fragmentList));this. viewPager2.setUserInputEnabled(false);//是否滑动this.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {super.onPageScrolled(position, positionOffset, positionOffsetPixels);changeTab(position);}});}private void changeTab(int position) {if (imCurrent != null && tvCurrent != null) {this.imCurrent.setSelected(false);this.tvCurrent.setSelected(false);}this.imCurrent = tabIcons[position];this.tvCurrent = tabTexts[position];this.imCurrent.setSelected(true);this.tvCurrent.setSelected(true);}//实现接口 隐藏状态栏public void onHideStatusBar(String data) {this.ll_tabbar.setVisibility(View.GONE);// 隐藏顶部状态栏if (getSupportActionBar() != null) {getSupportActionBar().hide();}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {// 使用WindowInsetsController的动画WindowInsetsController insetsController = getWindow().getInsetsController();if (insetsController != null) {insetsController.hide(WindowInsets.Type.statusBars());insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);}} else {// 兼容旧版本,使用系统UI标志,并添加淡出动画getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);}}// 实现接口 显示状态栏public void onShowStatusBar(String data) {this.ll_tabbar.setVisibility(View.VISIBLE);// 显示顶部状态栏if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {WindowInsetsController insetsController = getWindow().getInsetsController();if (insetsController != null) {insetsController.show(WindowInsets.Type.statusBars());insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);}} else {getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);// 同样,这里可以考虑使用淡入动画来平滑显示状态栏}if (getSupportActionBar() != null) {getSupportActionBar().show();}// 如果状态栏颜色需要透明处理,可以在显示时设置(这取决于您的UI设计)// getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);// 或者使用setStatusBarColor设置特定颜色}}

下面是布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"android:orientation="vertical"><androidx.viewpager2.widget.ViewPager2android:id="@+id/viewPager2"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><Viewandroid:layout_width="match_parent"android:layout_height="0.1dp"android:background="#f0f0f0" /><LinearLayoutandroid:id="@+id/ll_tabbar"android:layout_width="match_parent"android:layout_height="56dp"android:background="@color/white"android:orientation="horizontal"><LinearLayoutandroid:id="@+id/ll_home"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageViewandroid:id="@+id/im_home"android:layout_width="24dp"android:layout_height="24dp"android:background="@drawable/tab_menu_home" /><TextViewandroid:id="@+id/tv_home"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/tv_home"android:textColor="@drawable/tabar_title_text"android:textSize="12sp" /></LinearLayout><LinearLayoutandroid:id="@+id/ll_mine"android:layout_width="0dp"android:layout_height="56dp"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageViewandroid:id="@+id/im_mine"android:layout_width="24dp"android:layout_height="24dp"android:background="@drawable/tab_menu_mine" /><TextViewandroid:id="@+id/tv_mine"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/tv_mine"android:textColor="@drawable/tabar_title_text"android:textSize="12sp" /></LinearLayout></LinearLayout></LinearLayout>

效果

以上就是 安卓在Fragment控制状态栏显示隐藏的代码,

下面是dome地址

安卓在Fragment控制状态栏显示隐藏资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【redis】Redis的经典使用场景

目录 1.最常见——缓存2.数据共享分布式3.分布式锁4.全局ID5.计数器6.限流7.位统计8.购物车9.用户消息时间线timeline10.消息队列11.抽奖点赞、签到、打卡13.商品标签14.商品筛选15.用户关注、推荐模型16排行榜 1.最常见——缓存 数据类型&#xff1a;string例如&#xff1a;热…

给Windows软件添加异常捕获模块生成dump文件(附源码)

软件在运行过程中会时常发生内存越界、内存访问为例、stack overflow线程栈溢出、空指针与野指针等异常崩溃,仅仅是依靠Debug和Release下的调试是远远不够的,因为有些崩溃不是必现的,或者是Debug下很难出现的。所以我们需要在软件中添加异常捕获的模块,在捕获到异常时生成包…

1、C++编程中的基本运算 - 课件

一、基础知识 1、C程序的基本框架 // 预处理器指令&#xff0c;引入需要的头文件 #include <iostream> // 使用标准命名空间 using namespace std; // 主函数&#xff0c;程序的入口 int main() {// 局部变量声明// 程序逻辑代码// 返回值&#xff0c;表示程序正常结束…

C 语言连接MySQL 数据库

前提条件 本机安装MySQL 8 数据库 整体步骤 第一步&#xff1a;开启Windows 子系统安装Ubuntu 22.04.4&#xff0c;安装MySQL 数据库第三方库执行 如下命令&#xff1a; sudo aptitude install libmysqlclient-dev wz2012LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ sudo aptit…

鸿蒙求职面试内容总结——6月3日ZR的FS项目

最近接到了一些公司的入职面试邀约&#xff0c;这里略去公司的和项目的名字&#xff0c;做一些整理分享。 一、长列表如何实现部分渲染&#xff0c;使用的是哪一个API 在鸿蒙系统中&#xff0c;可以使用List组件来实现长列表的部分渲染。List组件支持使用条件渲染、循环渲染、…

docker一些常用命令以及镜像构建完后部署到K8s上

docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件&#xff08;tar格式&#xff09;7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…

英伟达开源最强通用模型Nemotron-4 340B

英伟达的通用大模型 Nemotron&#xff0c;开源了最新的 3400 亿参数版本。 本周五&#xff0c;英伟达宣布推出 Nemotron-4 340B。它包含一系列开放模型&#xff0c;开发人员可以使用这些模型生成合成数据&#xff0c;用于训练大语言模型&#xff08;LLM&#xff09;&#xff0…

Web开发技能树-HTML-class/id/name/tag

1 需求 需求1&#xff1a;CSS查找HTML元素 *tagclassid派生选择器 需求2&#xff1a;JavaScript查找HTML元素 通过id找到HTML元素&#xff1a;document.getElementById()通过标签名找到HTML元素&#xff1a;getElementsByTagName()通过类名找到HTML元素:document.getElemen…

分布式系统中的经典思想实验——两将军问题和拜占庭将军问题

文章目录 一、两将军问题1.1 问题描述1.2 深入理解两将军问题1.3 实验结论 二、拜占庭将军问题2.1 问题描述2.2 深入理解拜占庭将军问题2.3 解决方案 三、两将军和拜占庭问题的关系3.1 区别和联系3.2 应用与现实意义 参考资料 一、两将军问题 1.1 问题描述 两将军问题描述的是…

中国成熟工艺晶圆代工领域激烈的价格战即将落幕

据《经济日报》报道&#xff0c;中国第二大晶圆代工厂华虹半导体计划在下半年提高代工价格约10%。这标志着长达两年的成熟工艺代工价格下滑趋势的终结&#xff0c;意味着行业正从调整阶段走出&#xff0c;迈向更健康的发展轨道。受此影响&#xff0c;专注于成熟工艺的台湾晶圆代…

el-pagination 切换分页条数,会出现两次请求

文章目录 前言一、问题展示二、源码展示 前言 继上一次发现el-pagination在删除的时候pageNum不更新的问题。这次又发现了&#xff0c;切换分页条数&#xff0c;会出现两次请求。网上有很多解决方案&#xff0c;我就不多说了&#xff0c;我就简单记一下为啥会出现两次请求的问…

21. 第21章 算法分析

21. 算法分析 这个附录选自OReilly Media出版的Alen B.Downey的Think Complexity(2012)一书. 当你读完本书之后, 可能会像继续读读那本书.算法分析是计算机科学的一个分支, 研究算法的性能, 尤其是他们的运行时间和空间需求. 参见http://en.wikipedia.org/wiki/Analysis_of_al…

Vue前端通过Axios的post方式传输数据,后端为什么一直接收的值是null?

沃靠!这个细节太细了,搞了我两个多小时才找到这个bug。 一、 首先官方文档给我的post请求的例子是这样的: axios.post(/user, {firstName: Fred,lastName: Flintstone}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);})…

Linux下的抓包工具使用介绍

应用层 传输层 网络层 数据链路层 物理层 1&#xff09;tcpdump&#xff08;传输&#xff0f;网络层&#xff09; tcpdump -i eth0 tcpdump -i eth0 -vnn -v&#xff1a;显示包含有TTL&#xff0c;TOS值等等更详细的信息 -n&#xff1a;不要做IP解析为主机名 -nn&#xff1a;…

go协程的栈

go协程的栈默认有多少 Go 协程&#xff08;goroutine&#xff09;的栈初始大小并不是固定的多个栈&#xff0c;而是有一个默认的初始大小&#xff0c;这个大小在不同的 Go 版本中可能会有所不同。 目前&#xff0c;Go 1.17 版本中&#xff0c;默认的栈大小是 8KB。 关键点在于…

【Python的基本语法】

Python的基本语法包括以下几个方面&#xff1a; 注释&#xff1a; 注释以 # 开始&#xff0c;用于在代码中添加说明性文字&#xff0c;不会被解释器执行。 # 这是一个注释变量&#xff1a; 在Python中&#xff0c;变量不需要显式声明&#xff0c;直接通过赋值来创建。变量的命名…

RK平台Android单独编译内核

介绍如何在android平台下单独编译内核: 方式1(推荐): 在执行单独编译之前,必须有过整体编译Android,之后就可以单独编译内核开发,减少编译时间,具体操作如下: #!/bin/sh make ARCH=arm64 CC=../prebuilts/clang/host/linux-x86/clang-r383902b/bin/clang \ LD=.…

Shell 学习笔记 - 变量的类型 + 变量的赋值

1.6 Shell 变量的类型 Shell 变量分为四类&#xff0c;分别是 自定义变量环境变量位置变量预定义变量 根据工作要求临时定义的变量称为自定义变量&#xff1b; 环境变量一般是指用 export 内置命令导出的变量&#xff0c;用于定义 Shell 的运行环境&#xff0c;保证 Shell …

Vue51-插件

一、插件的定义 vue里面的插件&#xff0c;类似于游戏的外挂。 vue中插件的本质&#xff1a;一个对象&#xff0c;里面必须包含install方法。 二、插件的使用 2-1、创建一个插件js文件&#xff08;写在src中plugins.js&#xff09; 2-2、应用插件&#xff1a;Vue.use(插件) …

外键的基本概念

外键的基本概念 外键&#xff08;FOREIGN KEY&#xff09;&#xff1a;外键是一个或多个列&#xff0c;其值必须在另一个表中对应列的值中存在。外键用于维护两个表之间的关系&#xff0c;并确保引用的完整性。 外键在示例表结构中的应用 假设外键约束如下&#xff1a; FOR…