×

Android中获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)

Kalet Kalet 发表于2013-12-21 12:17:09 浏览190 评论0

抢沙发发表评论

为了更好的让应用程序的界面能适应不同手机的屏幕大小,有时候我们在开发中使用相对于屏幕实际大小的方法来设定布局中各个空间的位置跟大小,通过下面的方法可以获得Android手机实际屏幕分辨率大小。


首先我们需要用到的是DisplayMetrics这个类,它可以为我们获得手机屏幕属性,这里将其所在类导入。
import android.util.DisplayMetrics; 

 

得到实例对象。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm); 

 

得到手机屏幕高度:
dm.heightPixels;

 

得到手机屏幕宽度:
dm.widthPixels;

 

得到以上手机屏幕的高度跟宽度后,即可以通过这两个值按照比例还设定程序布局中空间的大小。

 

=========================

实现的程序如下:

 

在布局文件main.xml中添加一个TextView对象,一个Button对象。其中TextView对象用来显示获得的分辨率值,Button对象是当点击时获取分辨率。main.xml的代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"Android:orientation="vertical"Android:layout_width="fill_parent"Android:layout_height="fill_parent"><TextViewAndroid:id="@+id/tv"Android:layout_width="fill_parent"Android:layout_height="wrap_content"Android:text="手机分辨率为:"/><ButtonAndroid:id="@+id/btnOK"Android:layout_width="fill_parent"Android:layout_height="wrap_content"Android:text="获取手机分辨率"/></LinearLayout>

 

 

在TestActivity中的代码如下:

public class TestActivity extends Activity {private TextView tv;private Button btn;//获取手机屏幕分辨率的类private DisplayMetrics dm;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv = (TextView)findViewById(R.id.tv);btn = (Button)findViewById(R.id.btnOK);btn.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);//获得手机的宽度和高度像素单位为pxString strPM = "手机屏幕分辨率为:" + dm.widthPixels+"* "+dm.heightPixels;tv.setText(strPM);}});}}

 

 

运行程序后,当我们点击Button按钮时,可以看到下面的效果图:

 

下面介绍下在Android中如何获取屏幕相关的信息。

1.屏幕尺寸,源代码如下:

 

  1. DisplayMetrics metrics = new DisplayMetrics();  
  2. getWindowManager().getDefaultDisplay().getMetrics(metrics);  
  3. int screenWidth=metrics.widthPixels;            //屏幕宽度  
  4. int screenHeight=metrics.heightPixels;        //屏幕高度  

 

这段代码可以插入到Activity的onCreate()函数中。

2、Java反射机制获取系统@Hide属性

 

如获取状态条高度

在源码程序中代码:

 

  1. height= getResources().getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);  

 

通过SDK获取代码:

  1. class c = Class.forName("com.android.internal.R$dimen");  
  2. Object obj = c.newInstance();  
  3. Field field = c.getField("status_bar_height");  
  4. int x = Integer.parseInt(field.get(obj).toString());  
  5. int y = getResources().getDimensionPixelSize(x);  

 

 

获取标题栏、状态栏高度:

 

  1. Rect rect = new Rect();  
  2.   
  3. Window win = this.getWindow();  
  4.   
  5. win.getDecorView().getWindowVisibleDisplayFrame(rect);  
  6.   
  7. int statusBarHeight = rect.top;  
  8.   
  9. int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop();  
  10.   
  11. int titleBarHeight = contentViewTop - Variable.statusBarHeight;     

 

//statusBarHeight为状态栏高度,titleBarHeight为标题栏高度
      另外,这段代码不能插入Activity的onCreate()和onResume()函数中,否则得到的两个值都为0 。我的做法是将之插入到onPause()函数中,成功得到两个正确值。

群贤毕至

访客