不同Android版本裝置正確擷取螢幕解析度的通用方法

來源:互聯網
上載者:User

不同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現成的東西,但是對還不瞭解的同學來說還是很有好處的。    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.