不同Android版本设备正确获取屏幕分辨率的通用方法

谈到android屏幕分辨率,大家都知道,但是怎么正确的获取屏幕的分辨率呢?android2.2\2.3\4.0\4.1使用的方法一样吗?

答案是否定的。事物是发展变化的,android也不例外,android2.22.3因为标配是有触摸屏按钮的,也就是说触摸屏上BACKHOMEMEAN是在触摸屏分辨率识别范围之外的。但是在android4.0以后,已经取消了,开始使用软件按钮了,在屏幕的下方会占掉一定的高度,因此使用同样的方法去取屏幕分辨率,可能得到的值会不大一样。

笔者使用的android4.0平台,屏幕分辨率是1280X800写了一个能稍微智能一点,能正确获取屏幕分辨率的方法,主要修改代码:

@@ -26,12 +26,17 @@ import android.app.ProgressDialog; import android.app.AlertDialog; import android.content.DialogInterface; import android.util.Log;+import android.util.DisplayMetrics;+import java.lang.reflect.Method;+import android.os.Build;+import android.view.Display; public class MainActivity extends Activity {public Button Btn_Music, Btn_Movie, Btn_DVD, Btn_CMMB;public TextView src_title;private static final boolean DEBUG = true;private int all_src, cur_src;+ private int screen_w, screen_h;public static SerialService localService = null;@@ -182,6 +187,8 @@ public class MainActivity extends Activity {setContentView(R.layout.src_main);+ getDisplayScreenResolution();+connected = 0;connect_retry_cnt = 0;mConnectCheckTask = new TimerTask() {@@ -303,6 +310,47 @@ public class MainActivity extends Activity {}}+public int getDisplayScreenResolution()+ {+ int ver = Build.VERSION.SDK_INT;++ DisplayMetrics dm = new DisplayMetrics();+ android.view.Display display = getWindowManager().getDefaultDisplay();+ display.getMetrics(dm);++ screen_w = dm.widthPixels;++ Log.d(TAG, "Run1 first get resolution:"+dm.widthPixels+" * "+dm.heightPixels+", ver "+ver);+ if (ver < 13)+ {+ screen_h = dm.heightPixels;+ }+ else if (ver == 13)+ {+ try {+ Method mt = display.getClass().getMethod("getRealHeight");+ screen_h = (Integer) mt.invoke(display);+ } catch (Exception e) {+ e.printStackTrace();+ }+ }+ else if (ver > 13)+ {+ try {+ Method mt = display.getClass().getMethod("getRawHeight");+ screen_h = (Integer) mt.invoke(display);++ } catch (Exception e) {+ e.printStackTrace();+ }+ }++ Log.d(TAG, "Run2 Calibration resolution:"+screen_w+" * "+screen_h);++ return 0;+ }++void HideSrcAll() {//src_title.setVisibility(View.GONE);Btn_Music.setVisibility(View.GONE);

运行打印如下:

01-01 09:37:40.989 I/ActivityManager( 174): Start proc com.jeavox.Serial for activity com.jeavox.Serial/.MainActivity: pid=807 uid=10036 gids={}01-01 09:37:41.059 D/OpenGLRenderer( 361): Flushing caches (mode 1)01-01 09:37:41.189 D/OpenGLRenderer( 361): Flushing caches (mode 0)01-01 09:37:41.209 D/MainActivity( 807): Run1 first get resolution:1280 * 740, ver 1501-01 09:37:41.209 D/MainActivity( 807): Run2 Calibration resolution:1280 * 80001-01 09:37:41.279 D/ViewRootImpl( 807): pckname = com.jeavox.Serial01-01 09:37:41.299 D/ViewRootImpl( 807): pckname = com.jeavox.Serial01-01 09:37:41.319 E/SerialService( 807): ###################->>>>>> service create <<<<<<<

android4.0以前,display.getMetrics(dm);就能够获取正确的屏幕分辨率,4.04.1的就不行。所以在Run1 first get resolution:1280 * 740,而使用getRawHeight新方法修正后能得到正确的分辨率Run2 Calibration resolution:1280 * 800。在android4.0 SDK自带的Setting apk里ScreenAdaption.java里面也有获取屏幕分辨率的接口:主要代码如下,大同小异,

 WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);android.view.Display display = wm.getDefaultDisplay();int width = display.getRawWidth();int height = display.getRawHeight();


通过使用笔者提供的接口,可以正确的获取不同android版本的设备获取到正确的屏幕分辨率,难度不是很大,方法简单,其实都是android现成的东西,但是对还不了解的同学来说还是很有好处的。

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  6. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  7. android 使用html5作布局文件: webview跟javascript交互
  8. Android(安卓)Resource介绍和使用
  9. "Failed to fetch URL https://dl-ssl.google.com/android/repos

随机推荐

  1. android系统详细介绍
  2. 读取Activity/Processes的PID(Android)
  3. Eclipse 默认打开Android xml 布局
  4. Cocos2dx发布Android包,配置开发环境(菜鸟
  5. 转- ADB(Android Debug Bridge)技术实现
  6. Android(安卓)ndk入门准备--hello jni
  7. TAG解决错误:Error:No resource identifie
  8. ubuntu android studio ndk 配置
  9. android-获取手机电话的状态
  10. Android导入源码