android获取屏幕宽高与获取控件宽高 方法总结
获取屏幕 宽高 和 获取空间的宽高 在开发的时候经常用到,刚开始做开发的时候 总是 复制粘贴 不知道 所以然 ,今天 彻底的 总结一下 获取宽高的 用法
先讲一下原理 在最后贴出代码之一直接使用。
1. 获取屏幕的宽高。
首先要只一个 函数就是 WindowManager
他的api是这样说的
android.view
接口 WindowManager
所有超级接口:ViewManager
public interface WindowManagerextends ViewManager
The interface that apps use to talk to the window manager.
Use Context.getSystemService(Context.WINDOW_SERVICE) to get one of these.
Use Context.getSystemService(Context.WINDOW_SERVICE) to get one of these. 这句话很重要 因为这句话 就可以获取屏幕空间了。
可以依照api写出这句话 获取屏幕的服务了。
WindowManager a = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 这句怎么用先不用着急 先放着。
还有一个函数Display
Display
结构
继承关系
public class Display extends Object
java.lang.Object
android.view.Display
类概述
Display类提供关于屏幕尺寸和分辨率的信息。
常用方法有 getSize()目前 替代了 getWidth(),getHeight(),当然了都可以同时使用。
还有一个类 DisplayMetrics
有如下常用方法。
density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)densityDpi; // 屏幕密度(每寸像素:120/160/240/320)widthPixels; // 屏幕宽(像素,如:480px) heightPixels; // 屏幕高(像素,如:800px)
下面开始上代码 直接复制粘贴就行了。
方法1
/*
* 将对话框的大小按屏幕大小的百分比设置
*/
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
System.out.println("------------d1---------:" + d.getHeight());
System.out.println("------------d1---------:" + d.getWidth());
也可以这么写
// 获取屏幕宽高(方法1)
int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽(像素,如:480px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p)
现在的版本 用getSize()代替了个头getHeight()
这么写了
WindowManager a = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display d1 = a.getDefaultDisplay(); // 获取屏幕宽、高用
Point size = new Point();
d.getSize(size);
int width = size.x;
int height = size.y;
System.out.println("---------------------:" + width + height);注意 :这个代码不在acitiviy中写的时候 要用
WindowManager a = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
方法2 :
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float scaledDensity=dm.scaledDensity;
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
int screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)
int screenHeight = dm.heightPixels; // 屏幕高(像素,如:800px)
方法3: 这个方法待定还。
DisplayMetricsdm1 = getResources().getDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm1);
float density1 = dm1.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
intdensityDPI1 = dm1.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi1 = dm1.xdpi;
float ydpi1 = dm1.ydpi;
int screenWidthDip1 = dm1.widthPixels;
int screenHeightDip1 = dm1.heightPixels;
1.获取空间的宽高 在oncreate中获取空间宽高往往得到的是0 。下面两种方法 获取宽高
1.很简单直接 复用activity方法
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
System.out.println("dialog1:" + dialog1.getWidth());
}我基本用方法1
2.用onmeasure方法
int w = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
btn_dialog1_2.measure(w, h);
int height = btn_dialog1_2.getMeasuredHeight();
int width = btn_dialog1_2.getMeasuredWidth();
System.out.println("height:" + height + "width" + width);
看着就麻烦。这个文章只说明 获取 宽高 方便使用,拿来主义