標籤:inf 傳遞 通過 結果 裝置 androi 相容性 一個 idt
Android 手機解析度多種多樣,作為開發人員,做出的軟體不能只兼顧一種或幾種手機,而要在盡量多的手機上達到另我們滿意的現實效果。Android在設計之初,系統 就被設計為一個可以在多種不同解析度的裝置上啟動並執行作業系統。對於應用程式來說,系統平台向它們提供的是一個穩定的,跨平台的運行環境,而關於如何將程式 以正確的方式顯示到它所啟動並執行平台上所需要的大部分技術細節,都由系統本身進行了處理,無需程式的幹預。但畢竟效果有限,有時候我們還需要自己針對裝置的 解析度對程式最佳化。
在做五子棋的過程中,為了使布局更具有相容性,找了一些關於解析度的資料,網上能找到的基本都是使用DisplayMetrics來擷取解析度。經過自己的測試,發現還有一種方法能擷取到解析度,那就是使用android.view包裡的Display類。
下面先介紹下DisplayMetrics的相關資料。
DisplayMetrics是android.util包裡的一個類,類提供了一種關於顯示的通用資訊,如顯示大小,解析度和字型。
為了擷取DisplayMetrics 成員,首先初始化一個對象如下:
DisplayMetricsmetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
建構函式DisplayMetrics 不需要傳遞任何參數;調用getWindowManager()之後,會取得現有Activity 的Handle ,此時,getDefaultDisplay() 方法將取得的寬高維度存放於DisplayMetrics 對象中,而取得的寬高維度是以像素為單位(Pixel) , 像素 所指的是 絕對像素 而非 相對像素 。 其實現代碼如下:
private TextView textView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
String string = "手機螢幕解析度為:" + displayMetrics.widthPixels + "x" + displayMetrics.heightPixels;
textView = (TextView) findViewById(R.id.textView);
textView.setText(string);
}
下面介紹下我發現的另一種方法,那就是Display類,通過尋找API可知,該類在android.view包裡,描述為:Providesinformation about the display size and density。 使用方法如下:
private TextView textView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Display display = getWindowManager().getDefaultDisplay();
String string = "手機的螢幕解析度為:" + display.getWidth() + "x"
+ display.getHeight();
textView = (TextView) findViewById(R.id.textView);
textView.setText(string);
}
兩種方法運行結果相同: Display對象不僅可以通過調用getWidth()和getHeight()來擷取螢幕解析度,還可以通過getMetrics()方法來擷取描述此螢幕尺寸和解析度的DisplayMetrics對象。
DisplayMetrics displayMetrics= new DisplayMetrics(); display.getMetrics(displayMetrics);
另外,getOrientation ()還可以獲得螢幕的方向,getRefreshRate()擷取螢幕重新整理率等。
Android擷取裝置解析度的新方法 DisplayMetrics