我创建了一些自定义元素,我想以编程方式将它们放置在右上角(n来自顶部边缘的m像素和来自右边缘的像素)。因此我需要获取屏幕宽度和屏幕高度,然后设置位置:
n
m
int px = screenWidth - m; int py = screenHeight - n;
我如何在主要活动中获得screenWidth和?screenHeight
screenWidth
screenHeight
如果您想要以像素为单位的显示尺寸,您可以使用getSize:
getSize
Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y;
如果您不在,您可以通过以下Activity方式获得默认值:Display``WINDOW_SERVICE
Activity
Display``WINDOW_SERVICE
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay();
如果您在片段中并且想要完成此操作,只需使用 Activity.WindowManager(在 Xamarin.Android 中)或 getActivity().getWindowManager()(在 java 中)。
在getSize引入之前(在 API 级别 13 中),您可以使用现在已弃用的getWidth和方法:getHeight
getWidth
getHeight
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用来获取以下信息:
widthPixels
“显示的绝对宽度,以像素为单位。”
例子:
Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
API 级别 30 更新
final WindowMetrics metrics = windowManager.getCurrentWindowMetrics(); // Gets all excluding insets final WindowInsets windowInsets = metrics.getWindowInsets(); Insets insets = windowInsets.getInsetsIgnoreVisibility(WindowInsets.Type.navigationBars() | WindowInsets.Type.displayCutout()); int insetsWidth = insets.right + insets.left; int insetsHeight = insets.top + insets.bottom; // Legacy size that Display#getSize reports final Rect bounds = metrics.getBounds(); final Size legacySize = new Size(bounds.width() - insetsWidth, bounds.height() - insetsHeight);