android: 得到状态栏和导航样的高度

android: 得到状态栏和导航样的高度

一,代码:

package com.example.okdemo1.activity;

import static android.app.PendingIntent.getActivity;

import android.animation.Animator;

import android.animation.AnimatorListenerAdapter;

import android.graphics.Color;

import android.graphics.PixelFormat;

import android.os.Build;

import android.os.Bundle;

import android.transition.Transition;

import android.transition.TransitionInflater;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import androidx.activity.EdgeToEdge;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.graphics.Insets;

import androidx.core.view.ViewCompat;

import androidx.core.view.WindowCompat;

import androidx.core.view.WindowInsetsCompat;

import androidx.core.view.WindowInsetsControllerCompat;

import android.view.ViewGroup;

import android.view.ViewTreeObserver;

import android.view.Window;

import android.view.WindowInsets;

import android.view.WindowInsetsController;

import android.view.WindowManager;

import android.widget.Toast;

import com.example.okdemo1.R;

public class FrameActivity extends AppCompatActivity {

private View pushView;

private int deOptions; //系统可见性的选项

private View decorView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

EdgeToEdge.enable(this);

decorView = getWindow().getDecorView();

deOptions = decorView.getSystemUiVisibility();

setContentView(R.layout.activity_frame);

ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {

Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());

v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);

return insets;

});

View decorView = getWindow().getDecorView();

WindowInsets insets = null;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {

insets = this.getWindowManager().getCurrentWindowMetrics().getWindowInsets();

int statusBarHeight = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top; //in pixels

Log.d("test","状态栏高度:"+String.valueOf(statusBarHeight));

int navBarHeight = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom; //in pixels

Log.d("test","导航栏高度:"+String.valueOf(navBarHeight));

} else {

int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");

if (resourceId > 0) {

int statusBarHeight = getResources().getDimensionPixelSize(resourceId);

Log.d("test","状态栏高度:"+String.valueOf(statusBarHeight));

}

resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");

if (resourceId > 0) {

int navBarHeight = getResources().getDimensionPixelSize(resourceId);

Log.d("test","导航栏高度:"+String.valueOf(navBarHeight));

}

}

//在代码中得到屏幕高度

DisplayMetrics displayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

int width = displayMetrics.widthPixels;

int height = displayMetrics.heightPixels;

Log.d("test","屏幕高度:"+String.valueOf(height));

//得到遮罩层的高度

View mask=findViewById(R.id.mask);

//得到遮罩层的高度

mask.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

int width = mask.getWidth();

int height = mask.getHeight();

Log.d("事件监听", "遮罩:Width: " + width + ", Height: " + height);

// 获取根View及其布局参数

int rootHeight = decorView.getHeight();

Log.d("事件监听", "根视图: height: " + rootHeight);

// 移除监听器以避免内存泄漏

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {

mask.getViewTreeObserver().removeOnGlobalLayoutListener(this);

} else {

mask.getViewTreeObserver().removeGlobalOnLayoutListener(this);

}

}

});

}

}

说明:运行结果结果

内容视图(这里是遮罩)高度+状态栏+导航栏 = 根视图内容视图高度+状态栏 = 屏幕高度所以这里的屏幕高度不包括导航栏高度

二,测试效果:

相关推荐

网络的好处20条 互联网可以做什么
365bet娱乐场网站

网络的好处20条 互联网可以做什么

📅 10-04 ⭐ 3774
英雄联盟中国开始时间(英雄联盟开始时间查询)
365bet娱乐场网站

英雄联盟中国开始时间(英雄联盟开始时间查询)

📅 08-12 ⭐ 4741
一帧等于多少秒,视频一帧等于多少秒(120、60、30帧有啥区别)
三国志战略版华佗配什么兵种
365买球平台下载

三国志战略版华佗配什么兵种

📅 10-01 ⭐ 3937
只狼血刀术在哪怎么获取 不死斩杀狮子猿获取血刀术技巧攻略
厦门世界杯亚洲区预选赛中国VS日本观赛须知
365买球平台下载

厦门世界杯亚洲区预选赛中国VS日本观赛须知

📅 08-24 ⭐ 7966
推荐阅读 ❤️