IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓获取屏幕高度的问题分享 -> 正文阅读

[移动开发]安卓获取屏幕高度的问题分享

?在编写练手项目时,有一个获取屏幕高度的问题,要把两个组件固定显示在第一屏,

? ? ? ? 因此,获取屏幕的高度是这里必须跨过的坎。

? ? ? ? 首先,我们需要明确,一个应用程序的显示分为哪些范围呢,这里我就不解释了

? ? ? ? 给出一篇相当清晰的参考文章,感谢作者。

? ? ? ? https://blog.csdn.net/a_running_wolf/article/details/50477965

? ? ? ? 经过我查阅资料,得出一下六种方法,我写了一个demo,在onCreate方法调用下面的方法并输出结果即可。

? ? ? ? 其中部分方法是参考的这篇文章

? ? ? ?https://www.jianshu.com/p/1a931d943fb4

?

private int[] getWindowSizeFirst() {
? ? ? ? Rect outRect1 = new Rect();
? ? ? ? getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1);
? ? ? ? int widthPixel = outRect1.width();
? ? ? ? int heightPixel = outRect1.height();
? ? ? ? return new int[]{widthPixel,heightPixel};
? ? }
?
? ? private int[] getWindowSizeSecond() {
? ? ? ? Display display = getWindowManager().getDefaultDisplay();
? ? ? ? int width = display.getWidth();
? ? ? ? int height = display.getHeight();
? ? ? ? return new int[]{width,height};
? ? }
?
? ? private int[] getWindowSizeThird() {
? ? ? ? Display defaultDisplay = getWindowManager().getDefaultDisplay();
? ? ? ? Point point = new Point();
? ? ? ? defaultDisplay.getSize(point);
? ? ? ? int x = point.x;
? ? ? ? int y = point.y;
? ? ? ? return new int[]{x,y};
? ? }
?
? ? private int[] getWindowSizeFourth() {
? ? ? ? DisplayMetrics outMetrics = new DisplayMetrics();
? ? ? ? getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
? ? ? ? int widthPixels = outMetrics.widthPixels;
? ? ? ? int heightPixels = outMetrics.heightPixels;
? ? ? ? return new int[]{widthPixels,heightPixels};
? ? }
?
? ? private int[] getWindowSizeFifth() {
? ? ? ? Point outSize = new Point();
? ? ? ? getWindowManager().getDefaultDisplay().getRealSize(outSize);
? ? ? ? int x = outSize.x;
? ? ? ? int y = outSize.y;
? ? ? ? return new int[]{x,y};
? ? }
?
? ? private int[] getWindowSizeSixth() {
? ? ? ? DisplayMetrics outMetrics = new DisplayMetrics();
? ? ? ? getWindowManager().getDefaultDisplay().getRealMetrics(outMetrics);
? ? ? ? int widthPixel = outMetrics.widthPixels;
? ? ? ? int heightPixel = outMetrics.heightPixels;
? ? ? ? return new int[]{widthPixel,heightPixel};
? ? }


其中,第五和第六个方法不一样,得到的高度的确为屏幕的显示高度,我的K40显示高度为2400

但是,令人奇怪的是:

在我写的测试方法的demo中

其他的方法结果中高度的值全都是 ? ? ? ?2276

只有第五,第六种方法是 ? ? ? ?2400

经过我的大量测试,状态栏的高度值为80(demo和项目代码都是)

? ? ? ?

 int statusBarHeight1 = -1;
? ? ? ? int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
? ? ? ? if (resourceId > 0) {
? ? ? ? ? ? statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);
? ? ? ? }


ActionBar(使用默认高度的ToolBar也一样)的高度值为154,获取默认actionbar的高度如下

TypedValue tv =new TypedValue();
? ? ? ? if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
? ? ? ? ? ? height = ?TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
? ? ? ? }
//height自己定义即可


因此,我设置的第一屏的View的高度的理论值为2400-154-80 = 2166

但是,在项目的代码中,第一种方法却给出了2320的结果,也就是恰好减去了状态栏的高度

但除了第五和第六种方法都还是2276,不太清晰的一个数值。

具体原因我也不是很清楚,但是就目前发现的情况可以得出结论,如果读者也跟我一样不知道为什么的话,就可以采取第五和第六种方法,再减去状态栏和toolbar的高度即可,也能得到正确答案。

总而言之,具体方法还是要根据实际情况来,第五和第六种就完全够我们初学者使用了。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:19:29  更:2021-08-03 11:20:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 17:08:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码