android屏幕分辨率 的获取


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

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

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


[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
@@ -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);

运行打印如下:
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
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] 纯文本查看 复制代码
1
2
3
4
WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
android.view.Display display = wm.getDefaultDisplay();
int width     = display.getRawWidth();
int height    = display.getRawHeight();

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


可以使用的代码应该是这些:
private int screen_w, screen_h;  
   
        public int getDisplayScreenResolution(){           
        int ver = Build.VERSION.SDK_INT;   
  
        DisplayMetrics dm = new DisplayMetrics();   
        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;
    } 


http://www.apkbus.com/android-85719-1-1.html

http://www.2cto.com/kf/201212/177347.html







发布了369 篇原创文章 · 获赞 587 · 访问量 533万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览