Android状态栏高度、虚拟操作栏高度
public class ScreenUtils { private ScreenUtils() { throw new AssertionError(); } /** * dp单位转成px * * @param context context * @param dp dp值 * @return px值 */ public static int dp2px(Context context, int dp) { return (int) (dp * context.getResources().getDisplayMetrics().density); } /** * 获取屏幕宽度 */ public static int getScreenWidth(Context context) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); return dm.widthPixels; } /** * 获取屏幕高度 */ public static int getScreenHeight(Context context) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); return dm.heightPixels; } /** * 获取状态栏高度 */ public static int getStatusBarHeight(Context context) { // 一般是25dp int height = dp2px(context, 20); LogUtil.i("common statusBar height:" + height); //获取status_bar_height资源的ID int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { height = context.getResources().getDimensionPixelSize(resourceId); LogUtil.i("real statusBar height:" + height); } LogUtil.i("finally statusBar height:" + height); return height; } /** * 虚拟操作拦(home等)是否显示 */ public static boolean isNavigationBarShow(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Display display = activity.getWindowManager().getDefaultDisplay(); Point size = new Point(); Point realSize = new Point(); display.getSize(size); display.getRealSize(realSize); return realSize.y != size.y; } else { boolean menu = ViewConfiguration.get(activity).hasPermanentMenuKey(); boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); if (menu || back) { return false; } else { return true; } } } /** * 获取虚拟操作拦(home等)高度 */ public static int getNavigationBarHeight(Activity activity) { if (!isNavigationBarShow(activity)) return 0; int height = 0; Resources resources = activity.getResources(); //获取NavigationBar的高度 int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) height = resources.getDimensionPixelSize(resourceId); LogUtil.i("NavigationBar的高度:" + height); return height; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理