【问题标题】:android detect device widthandroid检测设备宽度
【发布时间】:2016-12-20 04:45:22
【问题描述】:

有没有办法检测设备宽度,以便我们可以根据设备屏幕宽度以编程方式添加视图。例如,单窗格或双窗格。

目前,自适应 UI 的方式是针对不同的设备尺寸使用布局 XML。这在我们的例子中不够灵活。

layout-small/
layout-large/
layout-sw600dp/

我们的首选方式是:layout.xml 仅定义根空容器,并根据运行时检测到的设备大小以编程方式添加视图。

谢谢。

【问题讨论】:

  • 这样你就会为一个充满痛苦的世界做好准备。赔率是你的“不够灵活”真的是你做错了什么。在 Android 上几乎不惜一切代价避免这种方法是有原因的。您的示例是 Android 实际上非常擅长的经典示例。

标签: android layout adaptive-ui


【解决方案1】:

你可以使用此代码获取运行时设备的显示宽度和高度

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;

你可以这样设置

view.setLayoutParams(new LayoutParams(width, height));

【讨论】:

  • 你可以使用该参数设置宽度
【解决方案2】:

此代码将在运行时准确支持所有版本的android设备分辨率(宽度,高度)

private void calculateDeviceResolution(Activity context) {
        Display display = context.getWindowManager().getDefaultDisplay();

        if (Build.VERSION.SDK_INT >= 17) {
            //new pleasant way to get real metrics
            DisplayMetrics realMetrics = new DisplayMetrics();
            display.getRealMetrics(realMetrics);
            realWidth = realMetrics.widthPixels;
            realHeight = realMetrics.heightPixels;

        } else if (Build.VERSION.SDK_INT >= 14) {
            //reflection for this weird in-between time
            try {
                Method mGetRawH = Display.class.getMethod("getRawHeight");
                Method mGetRawW = Display.class.getMethod("getRawWidth");
                realWidth = (Integer) mGetRawW.invoke(display);
                realHeight = (Integer) mGetRawH.invoke(display);
            } catch (Exception e) {
                //this may not be 100% accurate, but it's all we've got
                realWidth = display.getWidth();
                realHeight = display.getHeight();
                Constants.errorLog("Display Info", "Couldn't use reflection to get the real display metrics.");
            }

        } else {
            //This should be close, as lower API devices should not have window navigation bars
            realWidth = display.getWidth();
            realHeight = display.getHeight();
        }
    }

得到宽度或高度后可以这样设置

view.setLayoutParams(new LayoutParams(realWidth , realHeight ));

【讨论】:

    【解决方案3】:

    在活动中,

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int height = dm.heightPixels;
    int width = dm.widthPixels;
    

    在片段中,

    DisplayMetrics dm = new DisplayMetrics();
    ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm);
    int height = dm.heightPixels;
    int width = dm.widthPixels;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 2023-04-09
      相关资源
      最近更新 更多