【问题标题】:How to differentiate a 16:9 display from a 18:9 one?如何区分 16:9 显示器和 18:9 显示器?
【发布时间】:2018-03-08 12:16:19
【问题描述】:

在我的 Android 应用程序中,我使用不同的 Android 资源目录来支持多种屏幕尺寸和方向。所以在res里面我有一个layout文件夹,一个layout-land文件夹,一个layout-large文件夹,一个layout-large-land文件夹等等。

这种方法对我来说非常有效,直到我尝试将我的应用安装在具有18:9 显示屏而不是16:9 显示屏的较新手机中。

此手机从layoutlayout-land 文件夹中提取资源,这意味着它正在注册为“正常”屏幕。

此外,如果我尝试使用以下代码获取此手机的屏幕尺寸,

int screenSize = getResources().getConfiguration().screenLayout &
                Configuration.SCREENLAYOUT_SIZE_MASK;


        switch(screenSize) {
            case Configuration.SCREENLAYOUT_SIZE_XLARGE:
                Toast.makeText(this, "Extra Large Screen", Toast.LENGTH_LONG).show();
                break;
            case Configuration.SCREENLAYOUT_SIZE_LARGE:
                Toast.makeText(this, "Large Screen", Toast.LENGTH_LONG).show();
                break;
            case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                Toast.makeText(this, "Normal Screen", Toast.LENGTH_LONG).show();
                break;
            case Configuration.SCREENLAYOUT_SIZE_SMALL:
                Toast.makeText(this, "Small Screen", Toast.LENGTH_LONG).show();
                break;
            default:
                Toast.makeText(this, "Screen size is neither xlarge, large, normal or small", Toast.LENGTH_LONG).show();
        }

然后它再次被注册为普通屏幕。 但 16:9 显示屏的手机也是如此。不用说,这会在这两款手机上的应用外观上造成微小但明显的差异。

所以我的问题是,有没有办法区分这两种显示器?

注意:我知道有一些解决方法,比如完全避免 dp 值并只使用权重,但我想知道是否有“官方”或“建议”的方法来处理这种情况。很像用于横向的layout-land 文件夹或用于超大屏幕的layout-xlarge 文件夹等等。

提前致谢。

【问题讨论】:

    标签: android android-layout android-resources screen-orientation screen-size


    【解决方案1】:

    设备碎片一直是 Android 的一个大问题。可悲的是,使 Android 如此强大的同一件事也是一个巨大的痛苦来源。您无法真正预测设备制造商将如何更改设备的不同方面,包括屏幕和纵横比。

    但是您可以自己检查比率并据此进行更改(但我想这不是您想到的“官方”方式):

    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels);
    

    Source

    【讨论】:

    • 所以,操作过程是对两个设备使用相同的布局,然后查看 18:9 设备中需要更改的内容(一些视图需要向左一点,一个按钮需要稍微小一些等)并使用layourparams等以编程方式为此设备执行此操作。对吗?
    • 是的。不过,如果您使用 ConstraintLayout 可能会更简单。
    • 好的,谢谢。我会投票并接受你的回答。感谢您的时间和精力。
    • 没有给出确切的屏幕高度。总是返回少一点
    • 它不会返回屏幕大小,但窗口大小是您的应用程序占用的屏幕部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多