Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 不同Android版本設備正確獲取屏幕分辨率的通用方法

不同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.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);       運行打印如下:   [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版本的設備獲取到正確的屏幕分辨率,難度不是很大,方法簡單,其實都是android現成的東西,但是對還不了解的同學來說還是很有好處的。        
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved