当前位置: 代码迷 >> Android >> android获取屏幕宽高与获取控件宽高 步骤总结
  详细解决方案

android获取屏幕宽高与获取控件宽高 步骤总结

热度:13   发布时间:2016-04-28 03:22:35.0
android获取屏幕宽高与获取控件宽高 方法总结

获取屏幕 宽高 和 获取空间的宽高  在开发的时候经常用到,刚开始做开发的时候 总是 复制粘贴 不知道 所以然 ,今天 彻底的 总结一下  获取宽高的 用法

先讲一下原理 在最后贴出代码之一直接使用。

1. 获取屏幕的宽高。

首先要只一个 函数就是 WindowManager

他的api是这样说的

android.view
接口 WindowManager

所有超级接口:
ViewManager

public interface WindowManager
extends 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 :

	<span style="white-space:pre">		</span>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: 这个方法待定还。

						DisplayMetrics	dm1 = getResources().getDisplayMetrics();			getWindowManager().getDefaultDisplay().getMetrics(dm1);  			float density1 = dm1.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)  			int	densityDPI1 = 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);

看着就麻烦。这个文章只说明 获取 宽高 方便使用,拿来主义 

  相关解决方案