安卓在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.rhkb.cn/news/351511.html

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

相关文章

技巧解析,如何向Kimi提问才能写出更好的论文?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 今天为大家整理、分享的Kimi提问技巧&#xff0c;将对论文写作的各个阶段提供帮助&#xff0c;可以以此来辅助学术论文撰写。 在此之前&#xff0c;先为大家科普一个概念——信息熵&am…

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…

618大促背后的智能力量:天润融通如何用AI大模型提升客户服务?

五一结束之后&#xff0c;消费零售企业马上又要进入一场紧锣密鼓的新战斗——618&#xff0c;一场上半年最重要的促销活动。 对品牌和商家来说&#xff0c;每年618都是一场新考验。因为618时间有限&#xff0c;而消费趋势总是在不断变化&#xff0c;市场竞争又越来越激烈。如何…

Oracle 入门--前提

目录 1.sqlplus 2.dual是什么&#xff1f; 3.SQL语句的种类 4.Oracle是如何工作的 5.Oracle查看配置文件 6.修改配置文件 7.常用的参数设置 1.sqlplus 管理数据库&#xff1a;启动&#xff0c;关闭&#xff0c;创建&#xff0c;删除对象......查看数据库的运行状态&…

创建STM32F10X空项目教程

创建STM32F10X系列的空项目工程 官网下载STM32标准外设软件库 STM32标准外设软件库 创建一个空文件夹作为主工程文件夹在主工程文件夹中&#xff0c;创建三个空文件夹 CMSIS - 存放内核函数及启动引导文件 FWLIB - 存放库函数 USER - 存放用户的函数将STM32标准外设软件库文件…

扫地机LiDAR形态之美

石头扫地机V20 LiDAR: Flash光源和Spot光源切换 图来自 Robot森 LiDAR(Light Detection and Ranging,激光雷达)技术在扫地机器人中的应用,不仅提升了机器的智能性和实用性,还展现了一种科技与艺术的融合之美。 一、外观设计的精致性 紧凑与轻巧:扫地机器人的LiDAR传感器…

活动集锦 | 英码科技积极参与行业盛会,AI赋能城市数字化转型

在当今数字经济时代&#xff0c;城市全域数字化转型已经成为提升城市管理效能、优化资源配置、推动经济发展的重要手段。英码科技始终致力于为企业打造高效、低成本的行业应用方案&#xff0c;助力企业实现数字化转型。近日&#xff0c;英码科技受邀参加了多场行业展示活动&…

reflutter工具实践之--xx一番赏app

此文章已经录制b站视频&#xff1a; flutter逆向案例-某某一番赏_哔哩哔哩_bilibili 一、工具介绍--reFlutter 这个框架帮助 Flutter 应用逆向工程&#xff0c;使用 Flutter 库的补丁版本&#xff0c;该版本已经编译并准备好重新打包应用。此库修改了快照反序列化过程&#…

kafka生产消费流程

kafka数据写入流程 1.生产者先从zookeeper的"/brokers/topic/主题名/partitions/分区名/state"节点找到该partition的leader 生产者在ZK中找到对应的broker broker进程上的leader将消息写入到本地log中。 follower从leader上拉取消息&#xff0c;写入到本地log&…

集成学习方法:Bagging与Boosting的应用与优势

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

实战计算机网络02——物理层

实战计算机网络02——物理层 1、物理层实现的功能2、数据与信号2.1 数据通信模型2.2 通信领域常用术语2.3 模拟信号和数字信号 3、信道和调制3.1 信道3.2 单工通信、半双工通信、全双工通信3.3 调制3.4 奈式准则3.5 香农定律 4、传输媒体4.1 导向传输媒体4.2 非导向传输媒体 5、…

Java课程设计:基于ssm的旅游管理系统系统(内附源码)

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 2023年处于信息科技高速发展的大背景之下。在今天&#xff0c;缺少手机和电脑几乎已经成为不可能的事情&#xff0c;人们生活中已经难以离开手机和电脑。针对增加的成本管理和操作,各大旅行社非常必要…

LINUX网络FTP服务

一、FTP服务 FTP服务&#xff1a;file transfer protocol :文件传输协议。在网络上进行双向传输&#xff0c;也是一个应用程序。不同的操作系统有不同的FTP软件&#xff0c;但使用的协议是一样的。 FTP协议基于TCP协议&#xff0c;有两个端口&#xff0c;即20和21。 20端口&…

书生·浦语大模型实战营第二期作业六

1、安装环境&#xff1a; 2、安装legent和agentlego&#xff1a; 3、部署apiserver&#xff1a; 4、legent web demo&#xff1a; 5、没搜到&#xff0c;很尴尬&#xff1a; 6、自定义工具&#xff1a; 7、智能体“乐高”&#xff1a; 8、智能体工具&#xff0c;识别图片&#…

嵌入式数据库的一般架构

嵌入式数据库的架构与应用对象紧密相关&#xff0c;其架构是以内存、文件和网络等三种方式为主。 1.基于内存的数据库系统 基于内存的数据库系统中比较典型的产品是每个McObject公司的eXtremeDB嵌入式数据库&#xff0c;2013年3月推出5.0版&#xff0c;它采用内存数据结构&…

嵌入式实训day5

1、 from machine import Pin import time # 定义按键引脚控制对象 key1 Pin(27,Pin.IN, Pin.PULL UP) key2 Pin(26,Pin.IN, Pin.PULL UP)led1 Pin(15,Pin.ouT, value0) led2 Pin(2,Pin.ouT, value0) led3 Pin(0,Pin.ouT, value0) # 定义key1按键中断处理函数 def key1 ir…

爱心代码来喽

今天给大家分享一个爱心代码&#xff0c;送给我的粉丝们。愿你们天天开心&#xff0c;事事顺利&#xff0c;学业和事业有成。 下面是运行代码&#xff1a; #include<stdio.h> #include<Windows.h> int main() { system(" color 0c"); printf(&q…

低代码开发MES系统,一周实现数字化

随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接计划层与控制层的关键信息系统&#xff0c;在提升生产效率、优化资源配置、保障产品质量等方面发挥着重要作用。然而&#xff0c;传统…

理解DDD设计

DDD的理解 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;是一种软件开发方法论&#xff0c;强调将业务领域作为软件设计的核心&#xff0c;以便更好地满足业务需求。DDD认为&#xff0c;软件开发的核心是理解业务&#xff0c;而不是实现技术。在D…

【设计模式深度剖析】【7】【行为型】【观察者模式】

&#x1f448;️上一篇:中介者模式 | 下一篇:备忘录模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 观察者模式英文原文直译如何理解&#xff1f; 观察者模式的角色类图代码示例 观察者模式的应用观察者模式的优点观察者模式的缺点观察者模式的使用场景 观察…