协慌网

登录 贡献 社区

以像素为单位获取屏幕尺寸

我创建了一些自定义元素,我想以编程方式将它们放置在右上角(距上边缘n像素,右边缘m像素)。因此我需要获得屏幕宽度和屏幕高度,然后设置位置:

int px = screenWidth - m;
int py = screenHeight - n;

如何在主 Activity 中获得screenWidthscreenHeight

答案

如果您想要显示尺寸(以像素为单位),可以使用getSize

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

如果您不在Activity ,则可以通过WINDOW_SERVICE获取默认Display

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

在引入getSize之前(在 API 级别 13 中),您可以使用现在不推荐使用的getWidthgetHeight方法:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

但是,对于您正在描述的用例,布局中的边距 / 填充似乎更合适。

另一种方法是: DisplayMetrics

描述有关显示的一般信息的结构,例如其大小,密度和字体缩放。要访问 DisplayMetrics 成员,请初始化如下对象:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

我们可以使用widthPixels获取以下信息:

“显示器的绝对宽度,以像素为单位。”

例:

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);

一种方法是:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

它已弃用,您应该尝试使用以下代码。前两行代码为您提供了 DisplayMetrics 对象。此对象包含 heightPixels,widthPixels 等字段。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int height = metrics.heightPixels;
int width = metrics.widthPixels;

它可能无法回答你的问题,但知道(当我遇到这个问题时我自己正在寻找它)可能是有用的,如果你需要一个 View 的维度,但你的代码在布局尚未布局时正在执行(例如在onCreate() )您可以使用View.getViewTreeObserver().addOnGlobalLayoutListener()设置ViewTreeObserver.OnGlobalLayoutListener ,并在其中放置需要视图维度的相关代码。布局布局后将调用侦听器的回调。