在Android中获取屏幕宽度和高度
Posted
技术标签:
【中文标题】在Android中获取屏幕宽度和高度【英文标题】:Get screen width and height in Android 【发布时间】:2011-06-12 04:51:39 【问题描述】:如何获取屏幕宽度和高度并将此值用于:
@Override protected void onMeasure(int widthSpecId, int heightSpecId)
Log.e(TAG, "onMeasure" + widthSpecId);
setMeasuredDimension(SCREEN_WIDTH, SCREEN_HEIGHT -
game.findViewById(R.id.flag).getHeight());
【问题讨论】:
见:***.com/questions/1016896/… 这能回答你的问题吗? How to get screen dimensions as pixels in android 更新正确答案***.com/a/67691009/4797289 【参考方案1】:DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
这在某些情况下可能不起作用。对于getMetrics comments:
获取描述这个大小和密度的显示指标 展示。该方法返回的大小不一定 表示显示器的实际原始尺寸(原始分辨率)。
可以调整返回的大小以排除某些始终可见的系统装饰元素。
它可以扩展以提供与最初为较小显示器设计的旧应用程序的兼容性。
根据显示所属的WindowManager可能会有所不同。
如果从非活动上下文请求(例如,通过 (WindowManager) 的应用程序上下文 getApplicationContext().getSystemService(Context.WINDOW_SERVICE)) metrics 将根据当前报告整个显示的大小 旋转并减去系统装饰区域。
如果从活动中请求(使用 getWindowManager() 或 (WindowManager) getSystemService(Context.WINDOW_SERVICE))导致 指标将对应于当前应用程序窗口指标。在这种情况下,大小可以小于多窗口模式下的物理大小。
所以,要获得真正的尺寸:
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
或:
Point point = new Point();
getWindowManager().getDefaultDisplay().getRealSize(point);
int height = point.y;
int width = point.x;
【讨论】:
【参考方案2】:@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
public static double getHeight()
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
display.getRealMetrics(displayMetrics);
//int height = displayMetrics.heightPixels;
//int width = displayMetrics.widthPixels;
return displayMetrics.heightPixels;
使用该方法可以获得屏幕高度。
如果您想将宽度更改为displayMetrics.heightPixels
到displayMetrics.widthPixels
。
它还包括所需的 api Build 版本。
【讨论】:
【参考方案3】: @Override
protected void onPostExecute(Drawable result)
Log.d("width",""+result.getIntrinsicWidth());
urlDrawable.setBounds(0, 0, 0+result.getIntrinsicWidth(), 600);
// change the reference of the current drawable to the result
// from the HTTP call
urlDrawable.drawable = result;
// redraw the image by invalidating the container
URLImageParser.this.container.invalidate();
// For ICS
URLImageParser.this.container.setHeight((400+URLImageParser.this.container.getHeight()
+ result.getIntrinsicHeight()));
// Pre ICS`enter code here`
URLImageParser.this.container.setEllipsize(null);
【讨论】:
请连同代码一起写一些解释。在 SO --Review 中通常不鼓励仅代码答案以上是关于在Android中获取屏幕宽度和高度的主要内容,如果未能解决你的问题,请参考以下文章