雜記之獲得螢幕的大小

來源:互聯網
上載者:User

package cn.com.chenzheng_java;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.util.DisplayMetrics;<br />import android.util.Log;</p><p>public class DisplayMaricsActivity extends Activity {<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> displayMarics();<br /> }</p><p> private void displayMarics(){<br /> /*DisplayMetrics主要用於查看手機相關的實際高度、寬度、密度、以及字型縮放等資訊*/<br /> DisplayMetrics metrics = new DisplayMetrics();<br /> /*getWindoeManager()擷取視窗管理器<br /> * getDefaultDisplay()擷取預設的Display<br /> * getMetrics();根據擷取的Display新的資料,初始化DisplayMetrics<br /> * */<br /> getWindowManager().getDefaultDisplay().getMetrics(metrics);<br /> Log.i("螢幕高度:", metrics.heightPixels+"");</p><p> Log.i("螢幕寬度:", metrics.widthPixels+"");</p><p> Log.i("維度密度:", metrics.density+"");</p><p> }</p><p>}</p><p>

關於這個density,我們得仔細說下。這個很重要。

density主要用來解決不同手機解析度不同導致的布局被破壞的問題。

1.什麼是density

  1)density

  density表示每英寸有多少個顯示點(邏輯值),它的單位是dpi:dot per inch,通常螢幕大時,density就大,螢幕小時,density就小,通常

  螢幕實際解析度為240px*400px時,density=120

  螢幕實際解析度為320px*533px,density=160

  螢幕實際解析度為480px*800px,density=240

  2)解析度

  是整個屏是多少點,比如800x480,它是軟體的顯示單位

  3)從Android1.6版本開始支援density(對應API Level 4)

  用於解決應用在螢幕大小不同的硬體上正常顯示的問題

  2.相關代碼及設定

  1)AndroidManifest.xml

  <supports-screens android:anyDensity="true"/>

  <uses-sdk android:minSdkVersion="4"></uses-sdk>

  這個參數在API Level 4也就是SDK 1.6以後才啟用的,而且1.6版本的API Level 4的應用預設值就是True

  2)資來源目錄名(android 2.0以後)

  res/xxx-hdpi當density為240時,使用此目錄下的資源

  res/xxx-mdpi當density為160時,使用此目錄下的資源

  res/xxx-ldpi當density為120時,使用此目錄下的資源

  res/xxx不常尾碼,為預設設定,同xxx-mdpi

  3)資源單位(xml檔案中定義大小的單位)

  a)dp=dip=dx (Density independent pixel)

  基於螢幕密度的抽象單位,裝置無關的點,用於說明與密度無關的尺寸和位置。這些單位是相對於一個160dpi的螢幕,所有一個dp是160dpi螢幕上的一個點。

  b)px

  px指軟體的單位點,裝置相關的點

  c)具體使用

  i.布局時盡量使用單位dip,少使用px

  若使用px,如果設某控制項大小400x400px,在800x480上顯示正常,而在533x320的屏上就超出螢幕了

  若使用dp,如果設某控制項大小為160x160dp,就可以通過從系統中取density來算出真正的大小,比如在800x480屏的density設為240,而533x320屏的density設為160,藉以下公式計算

  pixels = dips * (density / 160)

  在800x480在屏中顯示240象素,而在533x320的屏中顯示為160象素,控制項在屏中顯示的比例是一樣的。

  ii.內部的處理過程分為三步:

  取screen中其它元素,轉為應用的值,計算應用各控制項位置,然後再轉成800x480以供真正顯示

  若res-xxx不存在,則讀取res有的資源,然後對其做相應縮放

  3.實現density的關鍵源碼

  1)BitmapFactory.java(用於縮放圖片)

  2)ComptibilityInfo.java(用於位置計算)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.