zoukankan      html  css  js  c++  java
  • android屏幕分辨率 的获取


    谈到android屏幕分辨率,大家都知道,但是怎么正确的获取屏幕的分辨率呢?android2.22.34.04.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







  • 相关阅读:
    九宫格拼图 支持44 55等
    js 怎样获取div 图片等的宽度,只要值,不要px
    spring boot单元测试之RestTemplate(一)
    java设计模式-原型(prototype)
    Hibernate注解(二):关联关系映射注解
    spring之@value详解二(转载)
    spring之@Value详解(转载)
    Spring之基于注解的注入
    Spring之bean生命始末
    Spring之bean后处理器
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744503.html
Copyright © 2011-2022 走看看