当前位置:操作系统 > 安卓/Android >>

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

不同Android版本设备正确获取屏幕分辨率的通用方法
 
 
 
      谈到android屏幕分辨率,大家都知道,但是怎么正确的获取屏幕的分辨率呢?android2.2\2.3\4.0\4.1使用的方法一样吗?
 
      答案是否定的。事物是发展变化的,android也不例外,android2.2、2.3因为标配是有触摸屏按钮的,也就是说触摸屏上BACK、HOME、MEAN是在触摸屏分辨率识别范围之外的。但是在android4.0以后,已经取消了,开始使用软件按钮了,在屏幕的下方会占掉一定的高度,因此使用同样的方法去取屏幕分辨率,可能得到的值会不大一样。
 
       笔者使用的android4.0平台,屏幕分辨率是1280X800写了一个能稍微智能一点,能正确获取屏幕分辨率的方法,主要修改代码:
 
[html]  
@@ -26,12 +26,17 @@ import android.app.ProgressDialog;  
 import android.app.AlertDialog;  
 import android.content.DialogInte易做图ce;  
 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);  
 
 
运行打印如下:
 
[plain]  
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 15  
01-01 09:37:41.209 D/MainActivity(  807): Run2 Calibration  resolution:1280 * 800  
01-01 09:37:41.279 D/ViewRootImpl(  807): pckname = com.jeavox.Serial  
01-01 09:37:41.299 D/ViewRootImpl(  807): pckname = com.jeavox.Serial  
01-01 09:37:41.319 E/SerialService(  807): ###################->>>>>> service create <<<<<<<  
 
 
        在android4.0以前,display.getMetrics(dm);就能够获取正确的屏幕分辨率,4.0、4.1的就不行。所以在Run1 first get resolution:1280 * 740,而使用getRawHeight新方法修正后能得到正确的分辨率Run2 Calibration resolution:1280 * 800。在android4.0 SDK自带的Setting apk里ScreenAdaption.java里面也有获取屏幕分辨率的接口:主要代码如下,大同小异,
 
[java] 
WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);  
android.view.Display display = wm.getDefaultDisplay();  
int width     = display.getRawWidth();  
int height    = display.getRawHeight();  
 
      通过使用
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,