有没有办法检测设备宽度,以便我们可以根据设备屏幕宽度以编程方式添加视图。例如,单窗格或双窗格。
目前,自适应 UI 的方式是针对不同的设备尺寸使用布局 XML。这在我们的例子中不够灵活。
layout-small/
layout-large/
layout-sw600dp/
我们首选的方式是:layout.xml 仅定义根空容器,并根据运行时检测到的设备大小以编程方式添加视图。
谢谢。
有没有办法检测设备宽度,以便我们可以根据设备屏幕宽度以编程方式添加视图。例如,单窗格或双窗格。
目前,自适应 UI 的方式是针对不同的设备尺寸使用布局 XML。这在我们的例子中不够灵活。
layout-small/
layout-large/
layout-sw600dp/
我们首选的方式是:layout.xml 仅定义根空容器,并根据运行时检测到的设备大小以编程方式添加视图。
谢谢。
您可以使用此代码获取运行时设备的显示宽度和高度
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
你可以设置像
view.setLayoutParams(new LayoutParams(width, height));
在一次活动中,
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;
此代码将在运行时准确支持所有版本的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 ));