有没有办法在Ionic/Angular/Cordova堆栈中找到以dp(而不是px)表示的屏幕大小

Is there any way to find screen size in dp (not px) in Ionic/Angular/Cordova stack?

本文关键字:px 表示 屏幕 dp Ionic Angular Cordova 堆栈 有没有      更新时间:2023-10-24

我知道如何使用文档、窗口和其他对象在Javascript中找到内部、外部、浏览器等像素的维度。。

问题是,返回的宽度和高度以px为单位,而不是以dp为单位。

比方说,如果屏幕足够小,以至于有些东西太大而放不下,我想隐藏一些元素。我想以这样一种方式,我按照特定的顺序删除元素(有些更有用,另一些用于附加信息),直到所有东西都能水平和垂直地显示在屏幕上(没有滚动)。

所以我会得到屏幕大小和ng,如果从窗口中删除对象,直到剩余的对象大小(像素加在一起)小于window.innerSize。在像素就是像素的桌面上效果很好。

但是,问题来了。在手机上,实际屏幕像素和显示像素通常是有比例的。例如,假设一个块在css中是300px高(高度:300px!重要),但在实际设备上是700像素高(使用开发者模式点击底部测量)。我意识到有些是由于应用程序外屏幕上的额外像素,比如顶部的staus栏,但其余的是屏幕的dp-px比。

若并没有找到窗口的dp尺寸的原始问题的解决方案,你们将如何处理这个问题?

找到了它,当你使用Cordova时,你有window.devicePixelRatio可供您使用。

它发挥得很好。使用window.innerHeight可以获得窗口内所有东西的实际高度(也适用于覆盖应用程序的键盘!)。对于每个元素,其在屏幕上的高度是his_css_height*window.devicePixelRatio。

翻译成我想要的。

很抱歉在这里回答我自己的问题,但我花了将近3个小时寻找答案,我决定在这里发帖,然后继续搜索。刚刚意识到这一点,希望它能帮助其他人:)

你可以试试这个:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density  = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth  = outMetrics.widthPixels / density;