安卓开发 状态栏相关设置

状态栏相关设置

设置是否可见

​ 正常情况下新建app时,UI界面会占满整个屏幕,屏幕顶部的状态栏会被覆盖,如果想让状态栏可见,可以使用下面的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 让状态栏保持可见
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
    // 一定要在调用setContentView之前设置
    setContentView(R.layout.activity_main);
}

状态栏背景透明

​ 上面的代码只是让状态栏可见,如果你的MainView的父视图中设置了背景,那么状态栏的背景也会受到影响,如果想设置状态栏的背景,可以使用下面的方法:

先创建一个StatusBar工具类:

package com.example.mediaplayproject.utils;

import android.app.Activity;
import android.view.View;
import android.view.WindowManager;

public class StatusBar {
    
    private Activity activity;
    public StatusBar(Activity activity){
        this.activity = activity;
    }
    
    public void setColor(int color){
        //将状态栏设置为传入的color
        View view = activity.getWindow().getDecorView();
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        activity.getWindow().setStatusBarColor(activity.getResources().getColor(color));
    }

    /**
     *  隐藏状态栏
     *  @author wm
     *  @createTime 2023/9/24 21:27
     */
    public void hide(){
        activity.getWindow().setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    /**
     *  设置状态栏字体颜色
     *  @author wm
     *  @createTime 2023/9/24 21:27
     * @param isDarkBackground:
     */
    public void setTextColor(boolean isDarkBackground){
        View decor = activity.getWindow().getDecorView();
        if (isDarkBackground) {
            // 黑暗背景字体浅色
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        } else {
            // 高亮背景字体深色
            decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        }
    }
}

然后在MainActivity的onCreate中设置状态栏的背景颜色为透明:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 让状态栏保持可见
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

    // 设置颜色为透明
    StatusBar statusBar = new StatusBar(MainActivity.this);
    statusBar.setColor(R.color.transparent);
    
    // 一定要在调用setContentView之前设置
    setContentView(R.layout.activity_main);
}

R.color.transparent颜色为透明:

<!--透明-->
<color name="transparent">#00000000</color>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,你可以通过设置Activity的Window属性来实现应用层面的状态栏屏蔽。具体来说,你可以使用`Window`类的`setFlags`方法来控制Window的标志位,从而实现隐藏状态栏。 以下是一个示例代码,演示如何隐藏状态栏: ```kotlin import android.os.Build import android.os.Bundle import android.view.View import android.view.WindowInsets import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 隐藏状态栏 hideStatusBar() // 设置布局 setContentView(R.layout.activity_main) } private fun hideStatusBar() { // 检查Android版本是否大于等于API 30(Android 11) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.decorView.windowInsetsController?.hide(WindowInsets.Type.statusBars()) } else { // 隐藏状态栏(全屏模式) window.setFlags( View.SYSTEM_UI_FLAG_FULLSCREEN, View.SYSTEM_UI_FLAG_FULLSCREEN ) } } } ``` 在这个示例中,我们在`onCreate`方法中调用了`hideStatusBar`函数来隐藏状态栏。在`hideStatusBar`函数中,我们首先检查Android版本是否大于等于API 30(Android 11)。如果是,我们使用`windowInsetsController`来隐藏状态栏。否则,我们使用`setFlags`方法设置全屏模式,隐藏状态栏。 需要注意的是,隐藏状态栏会导致应用全屏显示,状态栏不可见。这样做可能会影响用户体验,因为状态栏通常包含一些重要的系统信息(如时间、电量、网络连接等)。因此,在决定隐藏状态栏时,建议考虑用户需求和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值