安卓在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下很难出现的。所以我们需要在软件中添加异常捕获的模块,在捕获到异常时生成包…

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…

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

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

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…

Vue51-插件

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

机器真的能思考、学习和智能地行动吗?

In this post, were going to define what machine learning is and how computers think and learn. Were also going to look at some history relevant to the development of the intelligent machine. 在这篇文章中&#xff0c;我们将定义机器学习是什么&#xff0c;以及…

【Java03】Java中数组在内存中的机制

1. 内存中的数组 Java中的数组是一种引用类型&#xff0c;数组变量&#xff08;引用&#xff09;和数组元素在内存中是分开的。 Java中的数组变量其实就是指针。 如果想要访问数组元素&#xff0c;只能通过这个数组的引用变量&#xff08;指针&#xff09;来访问。 实际数组对…

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包&#xff08;F1&#xff0c;F4&#xff0c;F7&#xff0c;H7&#xff09;■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框&#xff0c;等待下载…

刚入职,写接口用了PUT和DELETE方法,结果被同事喷了,感觉自己被针对了

事情是这样&#xff0c;某社交平台上有个兄弟发帖&#xff0c;说自己刚入职国企&#xff0c;写了个借口&#xff0c;用了PUT和DELETE方法&#xff0c;前段说不能用这两个&#xff0c;这位仁兄感觉很委屈&#xff0c;特地发帖吐槽。 其实站在安全的角度来说&#xff0c;真没冤枉…

MySQL 示例数据库大全

前言&#xff1a; 我们练习 SQL 时&#xff0c;总会自己创造一些测试数据或者网上找些案例来学习&#xff0c;其实 MySQL 官方提供了好几个示例数据库&#xff0c;在 MySQL 的学习、开发和实践中具有非常重要的作用&#xff0c;能够帮助初学者更好地理解和应用 MySQL 的各种功…

云计算【第一阶段(14)】Linux的目录和结构

一、Liunx目录结构 1.1、linux目录结构 linux目录结构是树形目录结构 根目录&#xff08;树根&#xff09; 所有分区&#xff0c;目录&#xff0c;文件等的位置起点整个树形目录结构中&#xff0c;使用独立的一个"/",表示 1.2、常见的子目录 必须知道 目录路径目…

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…

阿里云服务器-Linux搭建fastDFS文件服务器

阿里云官网购买服务器&#xff0c;一般会有降价活动&#xff0c;这两天就发现有活动&#xff0c;99计划活动&#xff08;在活动期内&#xff0c;续费都是99元&#xff09; 阿里云官网-云服务器ECS 在这里&#xff0c;我购买了这台服务器&#xff0c;活动期内续费每年99元&…

[FFmpeg学习]windows环境sdl播放音频试验

参考资料&#xff1a; FFmpeg和SDL2播放mp4_sdl 播放mp4 声音-CSDN博客 SimplePlayer/SimplePlayer.c at master David1840/SimplePlayer GitHub 在前面的学习中&#xff0c;通过获得的AVFrame进行了播放画面&#xff0c; [FFmpeg学习]初级的SDL播放mp4测试-CSDN博客 播放…

仲恺ZK——信计专业《软件体系结构》24年试卷回忆

以下是我在总结的复习内容&#xff0c;有需要可以参考借鉴一下。我的主页还有另外一篇复习总结《仲恺ZK——信计专业《软件体系结构》&#xff0c;两者结合起来复习&#xff0c;帮助你轻松过考试&#x1f60a;。总的来说&#xff0c;考试不会太难&#xff0c;只要你了解了各类设…